XSL输出所有东西,包括节点名称,属性,文本

时间:2011-12-10 22:01:18

标签: xml xslt

在XSLT上,是否有一种简单的方法可以输出变量的所有内容?

我的变量类似于:

<node a="a">
  a
  <node>
    b
  </node>
</node>

所以我想输出它,因为它包括标签名称,属性,文本等。

谢谢!

是否可以不输出一些标签?比如

<a>aa
<b>bb
<c>cc</c></b></a> 

我想避免输出b标签,但想输出c?谢谢!

2 个答案:

答案 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>