Как получить CDATA от xml узла с помощью xsl?

Я пытаюсь добраться CDATA содержание узла XML с помощью XSL. Узел в настоящее время похож на это:

<node id="1" text="Book Information" ><![CDATA[This is sample text]]></node>

Мне нужно This is sample text часть. У кого-либо есть какая-либо идея об этом?

Заранее спасибо.

6
задан james.garriss 20 August 2012 в 15:10
поделиться

2 ответа

Что ж, если я использую эту таблицу стилей:

<?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 как к текстовому узлу, и вы в пути.

Вы сказали:

Я нашел что-то вроде:

, а затем получить CDATA:

Этот подход отлично работает, если вы также используете значение . Вот пример из строк вашего комментария с использованием вместо значения . Однако обратите внимание, что 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>
10
ответ дан 10 December 2019 в 00:34
поделиться

Я пробовал различные комбинации и получил решение для этого;

 <xsl:value-of select="/node/."/>
-1
ответ дан 10 December 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: