function MoodleXML(cat, qg, n = 10) {
let xml = `
<?xml version="1.0" ?>
<quiz>
<question type="category">
<category>
<text>$course$/${cat}</text>
</category></question>
`;
for (let i = 1; i <= n; ++i) {
let q = qg(i);
if (Array.isArray(q.answer)) {
xml =
xml +
`<question type="multichoice">
<name><text>${cat + '#' + i}</text></name>
<questiontext format="html"><text><![CDATA[${q.text}]]></text></questiontext>`;
for (let j = 0; j < q.answer.length; ++j) {
xml =
xml +
`<answer fraction="${j == 0 ? '100' : '0'}">
<text><![CDATA[${q.answer[j]}]]></text>
</answer>`;
}
xml =
xml +
` <shuffleanswers>1</shuffleanswers>
<single>true</single>
<answernumbering>abc</answernumbering>`;
} else if (q.answer === undefined) {
xml =
xml +
`<question type="essay">
<name>
<text>${cat + '#' + i}</text>
</name>
<questiontext format="html">
<text><![CDATA[<p>${q.text}</p>]]></text>
</questiontext>
<defaultgrade>1.0</defaultgrade>
<generalfeedback format="html"><text/></generalfeedback>
<penalty>0.1000000</penalty>
<hidden>0</hidden>
<responserequired>1</responserequired>
<responseformat>noinline</responseformat>
<responsefieldlines>15</responsefieldlines>
<attachments>1</attachments>
<attachmentsrequired>1</attachmentsrequired>
<graderinfo format="html"><text/></graderinfo>
<responsetemplate format="html"><text/></responsetemplate>
`;
} else if (typeof q.answer == 'number') {
xml =
xml +
`<question type="numerical">
<name><text>${cat + '#' + i}</text></name>
<questiontext format="html"><text><![CDATA[${q.text}]]></text></questiontext>`;
xml =
xml +
`<answer fraction="100">
<text><![CDATA[${q.answer}]]></text>
</answer>`;
} else {
xml =
xml +
`<question type="shortanswer">
<name><text>${cat + '#' + i}</text></name>
<questiontext format="html"><text><![CDATA[${q.text}]]></text></questiontext>`;
xml =
xml +
`<answer fraction="100">
<text><![CDATA[${q.answer}]]></text>
</answer>`;
}
xml = xml + `</question>`;
}
xml = xml + `</quiz>`;
return xml;
}