0

ID=11 と 12 の要素for-eachのみを考慮し、13 と 14 を無視するループを xslt 1.0 で記述する方法。Subbranch

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

2 に答える 2

1

最初の 2 つのサブブランチのみに一致する XPath 式でxsl:for-eachを使用できます。

<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>
于 2013-02-26T06:24:07.833 に答える
0

for-eachを扱う場合以外は、構文を避けることをお勧めし<xsl:key>ます。match-templateandapply-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']"/>

于 2013-02-26T07:35:24.600 に答える