Подтвердить что ты не робот

Как сохранить метки разметки?

У меня есть XML-документ, содержащий новости, а элемент body в новостях содержит p-теги среди простого текста. Когда я использую XSL для извлечения тела, например,

<xsl:value-of select="body" />

p-теги, похоже, удаляются. Я использую Visual Studio 2005 для реализации XSL.

Есть ли у кого-нибудь идеи, как избежать этого? Спасибо.

4b9b3361

Ответ 1

Попробуйте использовать

<xsl:copy-of select="body"/>

вместо этого. Из документация w3schools на том же:

Элемент <xsl:copy-of> создает копия текущего node.

Примечание. Узлы пространства имен, дочерние узлы, и атрибуты текущего node являются автоматически копируется также!

Ответ 2

Если у вас нет контроля над входным документом, копирование должно работать:

От http://www.xml.com/pub/a/2000/06/07/transforming/index.html

"С другой стороны, элемент xsl: copy-of может копировать все поддерево каждого node, которое выбирает шаблон. Сюда входят атрибуты, если атрибут select xsl: copy-of element имеет соответствующее значение В следующем примере шаблон копирует узлы элементов заголовка и все их узлы-потомки - другими словами, полные элементы заголовка, включая их теги, подэлементы и атрибуты:"

<xsl:template match="title">
  <xsl:copy-of select="*"/>
</xsl:template>

Ответ 3

Если у вас есть контроль над входным документом, CDATA - это правильный путь.

Ответ 4

Значение XML-элемента - это верно не только в XSLT, но и в реализациях DOM - это объединение всех его текстовых узлов-потомков. В XSLT value-of испускает значение элемента, а copy-of испускает копию элемента.

Ответ 5

Это потому, что двигатель интерпретирует <p> тег (исключая его для вывода). Вам нужно указать, что вы хотите, чтобы содержимое "как есть", используя атрибут "disable-output-escaping = yes | no".

<xsl:value-of select="body" disable-output-escaping="yes"/>