LMSouq
moodle-core Open

Xslt produce some <name> tags with CDATA and some <name> tags without?

WI
WillfulWizard
1 month ago
3 views
Problem Description
Summary: I&#39;m using xslt to convert data, and need to produce some &lt;text&gt; tags with CDATA inside and some &lt;text&gt; tags without. Is escaping the CDATA sections my only option? I&#39;m attempting to convert data I already have in xml to [Moodle Xml][1] for importing. The final product needs to include some Html, which the [Moodle Xml doc][2] specifically says needs to be contained in CDATA. **Desired Output:** &lt;question&gt; &lt;name&gt; &lt;text&gt;FooName&lt;/text&gt; &lt;/name&gt; &lt;questiontext format=&quot;html&quot;&gt; &lt;text&gt;&lt;![CDATA[&lt;img src=&quot;1.png&quot;&gt;]]&gt;&lt;/text&gt; &lt;/questiontext&gt; &lt;/question&gt; I gave this a try using the following code (trimmed down, but will include the data from my input xml file): **Method 1, nothing special** &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt; &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; omit-xml-declaration=&quot;yes&quot;/&gt; &lt;xsl:template match=&quot;/&quot;&gt; &lt;question&gt; &lt;name&gt; &lt;text&gt;FooName&lt;/text&gt; &lt;/name&gt; &lt;questiontext format=&quot;html&quot;&gt; &lt;text&gt;&lt;![CDATA[&lt;img src=&quot;1.png&quot;&gt;]]&gt;&lt;/text&gt; &lt;/questiontext&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; And got... **Bad Output from Method 1** &lt;question&gt; &lt;name&gt; &lt;text&gt;FooName&lt;/text&gt; &lt;/name&gt; &lt;questiontext format=&quot;html&quot;&gt; &lt;text&gt;&amp;lt;img src=&quot;1.png&quot;&amp;gt;&lt;/text&gt; &lt;/questiontext&gt; &lt;/question&gt; So I look up the [xslt documentation][3] and [some SO questions][4], which seem to say I have 2 options: 1. Do nothing, CDATA gets escaped. 2. use `cdata-section-elements =&quot;text&quot;` to auto-generate cdata sections inside &lt;text&gt; tags 3. Generate CDATA sections by hand, using `disable-output-escaping=&quot;yes&quot;` Ok, autogeneration sounds good. Lets try that: **Method 2 adding `cdata-section-elements=&quot;text&quot;`** &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot; omit-xml-declaration=&quot;yes&quot; cdata-section-elements=&quot;text&quot;/&gt; **Bad Output from `cdata-section-elements =&quot;text&quot;`**: &lt;question&gt; &lt;name&gt; &lt;text&gt;&lt;![CDATA[FooName]]&gt;&lt;/text&gt; &lt;/name&gt; &lt;questiontext format=&quot;html&quot;&gt; &lt;text&gt;&lt;![CDATA[&lt;img src=&quot;1.png&quot;&gt;]]&gt;&lt;/text&gt; &lt;/questiontext&gt; &lt;/question&gt; So 2 isn&#39;t an option because there are other &lt;text&gt; elements I do NOT want containing...

AI-Generated Solution

Powered by LMSouq AI · GPT-4.1-mini

✓ Solution Ready
Analyzing problem and generating solution…
Was this solution helpful?
Back to Knowledge Base