1

我有以下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在列正确时打印一个标题,我只需要一次。谁能帮我吗。

4

1 回答 1

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>
于 2012-10-19T15:08:37.780 回答