Хорошо, если я использую эту таблицу стилей:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="node/text()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
в этом XML-файле:
<?xml version="1.0" encoding="utf-8"?>
<node id=1 text="Book Information" ><![CDATA[This is sample text]]></node>
Я получаю ошибку разбора, потому что id=1
недопустимый XML.
Поместив кавычки вокруг значения атрибута (id="1"
) и перезапустив таблицу стилей, я получаю в качестве вывода:
Это пример текста
Так что есть начало. По сути, просто относитесь к CDATA как к текстовому узлу, и вы уже в пути.
Вы сказали:
Я нашел что-то вроде:
<xsl:output cdata-section-elements="text"/>
а затем получить CDATA:
<xsl:value-of select="node" />
Этот подход прекрасно работает, если вы также используете value-of
. Вот пример вашего комментария с использованием value-of
. Обратите внимание, что cdata-section-elements
работает только на стороне вывода, указывая, какие выводят XML-элементы, которые вы хотите распечатать в виде разделов CDATA вместо простых старых символьных данных. Это не имеет ничего общего с извлечением данных.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output cdata-section-elements="foo"/>
<xsl:template match="/">
<foo>
<xsl:value-of select="node"/>
</foo>
</xsl:template>
</xsl:stylesheet>
распечатывает
<?xml version="1.0"?>
<foo><![CDATA[This is sample text]]></foo>