Как сохранить метки разметки?
У меня есть XML-документ, содержащий новости, а элемент body в новостях содержит p-теги среди простого текста. Когда я использую XSL для извлечения тела, например,
<xsl:value-of select="body" />
p-теги, похоже, удаляются. Я использую Visual Studio 2005 для реализации XSL.
Есть ли у кого-нибудь идеи, как избежать этого? Спасибо.
Ответы
Ответ 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"/>