在XSLT上,是否有一种简单的方法可以输出变量的所有内容?
我的变量类似于:
<node a="a">
a
<node>
b
</node>
</node>
所以我想输出它,因为它包括标签名称,属性,文本等。
谢谢!
并
是否可以不输出一些标签?比如
<a>aa
<b>bb
<c>cc</c></b></a>
我想避免输出b标签,但想输出c?谢谢!
答案 0 :(得分:3)
<xsl:copy-of select="$variable"/>
答案 1 :(得分:1)
好问题,+ 1。
此转换为您的问题提供了答案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vVarNode" select="/*/node"/>
<xsl:variable name="vVarA" select="/*/a"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:copy-of select="$vVarNode"/>
===========
<xsl:apply-templates select="$vVarA"/>
</xsl:template>
<xsl:template match="b">
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档(两个变量从中“加载”):
<doc>
<node a="a">
a
<node>
b
</node>
</node>
<a>aa
<b>bb
<c>cc</c>
</b>
</a>
</doc>
产生了想要的正确结果(第一个变量的内容按“原样”输出,而b
及其文本节点子项被“删除”了什么输出超出第二个变量的内容):
<node a="a">
a
<node>
b
</node>
</node>
===========
<a>aa
<c>cc</c>
</a>