<aaa>
<b>I am a <i>boy</i></b>.
</aaa>
Как я могу получить точную строку как:
<b>I am a <i>boy</i></b>
.
Самый простой / кратчайший способ сделать это в вашем случае - вывести результат следующего выражения XPath :
/*/node()
Это означает : " Выберите все узлы, которые являются дочерними элементами верхнего элемента ."
Конечно, есть некоторые текстовые узлы только для пробелов, которые мы не хотим выделять, но XSLT может позаботиться об этом, поэтому выражение XPath так же просто, как показано выше.
Теперь, чтобы получить результат с преобразованием XSLT, мы используем следующее :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="/*/node()"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному XML-документу, получается требуемый результат :
<b>I am a <i>boy</i></b>.
Примечание :
Использование инструкции <xsl:copy-of>
xslt (не <xsl:value-of>
), которая копирует узлы , а не строковые значения.
Использование команды <xsl:strip-space elements="*"/>
XSLT, предписывающей процессору XSLT игнорировать любой текстовый узел, содержащий только пробелы, в документе XML.