2013-02-26 180 views
0

每個環路如何寫在XSLT 1.0 for-each環路,它僅考慮Subbranch元件與ID = 11和12,預先忽略13名14由於對於XSLT 1.0

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

回答

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> 
+0

哈米迪感謝您的回答,但我需要它的位置一般的選項,在這裏我們可以限制的childNodes()。 – user2109981 2013-02-26 06:29:23

+0

@user,那麼我的答案中的第二個模板應該是合適的。 – 2013-02-26 06:30:08

+0

我有一些東西,我在裏面和i'v限制上述模板中的子節點,但上面指定的解決方案不會在模板內工作(match =「branch 「)...所以你可以建議我一個解決方案,我可以在用戶中獲得childnodes(subbranch)的位置> – user2109981 2013-02-26 06:59:08

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']"/>

最好的問候, 彼得