在xslt中循环xml节点时,不应重复标题

时间:2012-10-19 14:54:50

标签: xslt

我有以下xml数据:

<data>
<item column="left" value="1" />
<item column="left" value="2" />
<item column="right" value="3" />
<item column="left" value="4" />
<item column="right" value="5" />
<item column="right" value="6" />
<item column="right" value="7" />
<item column="left" value="8" />
<item column="right" value="9" />
<item column="right" value="10" />
</data>

我想在列正确时打印标题DATA,我只需要一次。 任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

此转化

<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:template match="node()|@*" name="identity">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="/*[item[@column='right']]">
  <Heading>Data</Heading>
  <xsl:call-template name="identity"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<data>
    <item column="left" value="1" />
    <item column="left" value="2" />
    <item column="right" value="3" />
    <item column="left" value="4" />
    <item column="right" value="5" />
    <item column="right" value="6" />
    <item column="right" value="7" />
    <item column="left" value="8" />
    <item column="right" value="9" />
    <item column="right" value="10" />
</data>

生成(我猜测是想要的结果,因为没有指定想要的结果!!!):

<Heading>Data</Heading>
<data>
   <item column="left" value="1"/>
   <item column="left" value="2"/>
   <item column="right" value="3"/>
   <item column="left" value="4"/>
   <item column="right" value="5"/>
   <item column="right" value="6"/>
   <item column="right" value="7"/>
   <item column="left" value="8"/>
   <item column="right" value="9"/>
   <item column="right" value="10"/>
</data>

如果您想要失去使用身份规则的灵活性,那么上述转换可以缩短为:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>

 <xsl:template match="/*" name="top">
  <xsl:copy-of select="."/>
 </xsl:template>
 <xsl:template match="/*[item[@column='right']]">
  <Heading>Data</Heading>
  <xsl:call-template name="top"/>
 </xsl:template>
</xsl:stylesheet>