Я пытаюсь преобразовать документ с содержимым, как показано ниже, в другой документ, оставив CDATA точно так же, как в первом документе, но я не понял, как для сохранения CDATA с XSLT.Преобразование XML с XSLT и сохранение CDATA (в Ruby)
Initial XML:
<node>
<subNode>
<![CDATA[ HI THERE ]]>
</subNode>
<subNode>
<![CDATA[ SOME TEXT ]]>
</subNode>
</node>
Final XML:
<newDoc>
<data>
<text>
<![CDATA[ HI THERE ]]>
</text>
<text>
<![CDATA[ SOME TEXT ]]>
</text>
</data>
</newDoc>
Я пытался что-то подобное, но не повезло, все не получает перемешалось:
<xsl:element name="subNode">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:element>
Любые идеи, как сохранить CDATA?
Спасибо! Lance
Использование рубиновый/nokogiri
Update: Вот то, что работает.
<text disable-output-escaping="yes"><![CDATA[</text>
<value-of select="normalize-space(text())" disable-output-escaping="yes"/>
<text disable-output-escaping="yes">]]></text>
Это будет обернуть весь текст() узлы в CDATA, который работает для того, что мне нужно, и она будет сохранять HTML-теги в тексте.
Должен ли я просто использовать ruby и, возможно, регулярные выражения для их предварительной обработки до того, как я сделаю xslt или что-то в этом роде? Как еще вы это сделаете? Элементы cdata-section не совсем режут его, потому что я использую переменные и тому подобное. Спасибо за подсказку. –
Если вам абсолютно нужна CDATA, вам придется искать что-то другое, кроме XSLT. Тем не менее, мне очень любопытно, почему вам это нужно. XDM не различает текст и CDATA по очень веской причине - никакое здравомыслящее приложение для обработки XML никогда не должно давать для них другую семантику, поэтому CDATA и экранирование символов должны использоваться взаимозаменяемо. –
Я использую эти данные во Flash, и я слышал, что с CDATA/CDATA нет проблем. Я еще не пробовал еще: p –