Резюме: я использую xslt для преобразования данных, и мне нужно создать некоторые теги с CDATA внутри, а некоторые без. Выход из разделов CDATA - мой единственный выбор?
Я пытаюсь преобразовать данные, которые у меня уже есть в xml, в Moodle Xml для импорта. Конечный продукт должен включать в себя немного Html, который, в частности, Moodle Xml doc должен содержать в CDATA.
Желаемый выход:
<question>
<name>
<text>FooName</text>
</name>
<questiontext format="html">
<text><![CDATA[<img src="1.png">]]></text>
</questiontext>
</question>
Я попробовал использовать следующий код (урезанный, но включающий данные из моего входного XML-файла):
Метод 1, ничего особенного
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<question>
<name>
<text>FooName</text>
</name>
<questiontext format="html">
<text><![CDATA[<img src="1.png">]]></text>
</questiontext>
</xsl:template>
</xsl:stylesheet>
И получил ...
Плохой вывод из метода 1
<question>
<name>
<text>FooName</text>
</name>
<questiontext format="html">
<text><img src="1.png"></text>
</questiontext>
</question>
Итак, я смотрю xslt документацию и некоторые вопросы SO , которые, кажется, говорят, у меня есть 2 варианта:
- Ничего не делать, CDATA экранируется.
- использовать
cdata-section-elements ="text"
для автоматической генерации разделов cdata внутри тегов
- Создание разделов CDATA вручную, используя
disable-output-escaping="yes"
Хорошо, автогенерация звучит хорошо. Давайте попробуем это:
Метод 2 добавления cdata-section-elements="text"
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" cdata-section-elements="text"/>
Неверный вывод из cdata-section-elements ="text"
:
<question>
<name>
<text><![CDATA[FooName]]></text>
</name>
<questiontext format="html">
<text><![CDATA[<img src="1.png">]]></text>
</questiontext>
</question>
Так что 2 не вариант, потому что есть другие элементы, которые я НЕ хочу, содержащие CDATA, в схеме, которую я не контролирую.
Это оставляет мне вариант 3, избегая его вручную. Тогда мой вопрос: является ли вариант 3 моим единственным вариантом? Что еще я могу сделать, чтобы получить желаемый результат, используя XSLT? не используете XSLT?