我目前有一个像这样的xml文件:
<aaa>
<b>I am a <i>boy</i></b>.
</aaa>
如何获得完整的字符串:<b>I am a <i>boy</i></b>.
?感谢。
答案 0 :(得分:2)
您必须告诉XSLT您也想要复制元素。这可以通过附加规则来完成。请注意,我在apply-templates元素上使用自定义选择子句来选择属性以及所有节点类型对象。另请注意,aaa的规则优先,并且不将aaa元素本身复制到输出。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="aaa">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:2)
<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文档中任何仅限空格的文本节点。