对于xslt 1.0中的每个循环

时间:2013-02-26 06:17:40

标签: xslt

如何在xslt 1.0中编写for-each循环,只考虑ID = 11和12的Subbranch元素,忽略13和14.提前感谢

<root>
  <branch ID='1'>
    <subbranch ID='11'>
      <Values DataType='String'>
        <Value StringLength='3'>abc</Value>
      </Values>
    </subbranch>
    <subbranch ID='12'>
      <Values DataType='String'>
        <Value StringLength='3'>def</Value>
      </Values>
    </subbranch>
    <subbranch ID='13'>
      <Values DataType='String'>
        <Value StringLength='3'>uvw</Value>
      </Values>
    </subbranch>
    <subbranch ID='14'>
      <Values DataType='String'>
        <Value StringLength='3'>xyz</Value>
      </Values>
    </subbranch>
  </branch>
</root>

2 个答案:

答案 0 :(得分:1)

您可以将xsl:for-each与仅与前两个子分支匹配的XPath表达式一起使用:

<xsl:template match="root">
    <xsl:for-each select="branch/subbranch[@ID='11' or @ID='12']">
        <!-- Emit something... -->
    </xsl:for-each>
</xsl:template>

或者,或者:

<xsl:template match="root">
    <xsl:for-each select="branch/subbranch[position() &lt; 3]">
        <!-- Emit something... -->
    </xsl:for-each>
</xsl:template>

答案 1 :(得分:0)

除了处理for-each之外,建议避免<xsl:key>构造。 您应该使用match-templateapply-templates构造,而不考虑不需要的值。

此XSLT适用于您的来源:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output indent="yes" method="xml"/>

<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="subbranch[@ID='13']"/>
<xsl:template match="subbranch[@ID='14']"/>

</xsl:stylesheet>

给出了这个输出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<branch ID="1">
    <subbranch ID="11">
        <Values DataType="String">
            <Value StringLength="3">abc</Value>
        </Values>
    </subbranch>
    <subbranch ID="12">
        <Values DataType="String">
            <Value StringLength="3">def</Value>
        </Values>
    </subbranch>
</branch>
</root>

通过匹配空模板中不需要的值,可以避免处理XML的那些部分,例如: <xsl:template match="subbranch[@ID='13']"/>

祝你好运, 彼得