1

XML:

  <Grandparent>
         <Parent>
                 <Children>
                       <Info>
                           <Name>
                              <label id="chname"/>
                           </Name>
                       </Info>
                 </Children>

                 <Children>
                       <Info>
                           <Name>
                              <label id="chname"/>
                           </Name>
                       </Info>
                 </Children
                <Children>
                       <Info>
                           <Name>
                              <label id="chname"/>
                           </Name>
                       </Info>
                 </Children

         </Parent>
    </Grandparent>

XSLT:

<xsl:template match"/">
   <xsl:apply-templates select="GrandParent/Parent/Children" />
</xsl:template>


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

  <xsl:template match="Children/Info/Name/label">
    <xsl:copy>
      <xsl:variable name="childCtr" select="Parent/Children[position()]"/>

        <xsl:attribute name="text">
                     <xsl:value-of select="$childCtr"/>
        </xsl:attribute>
        <xsl:apply-templates select="@*|node()" />

     </xsl:copy>
  </xsl:template>


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

ラベルタグに属性を追加し、「子」ノード全体を取得しながら、テンプレートを使用して「子」のインデックスまたは位置を取得するにはどうすればよいですか?

お気に入り:

 Parent[0] = Children1,
 Parent[1] = Children2,
 Parent[2] = Children3

どうすればこのようなものを手に入れることができますか?助けが必要です。前もって感謝します

4

3 に答える 3

2

期待される出力のリストがない場合、何が欲しいかを判断するのは難しいですが、おそらくこれはそれです...

このXSLT1.0スタイルシート...

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

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

<xsl:template match="label">
  <label text="{count(../../../preceding-sibling::Children) + 1}">
    <xsl:apply-templates select="@*|node()"/>
  </label>
</xsl:template>

</xsl:stylesheet>

...この入力に適用すると...

<Grandparent>
    <Parent>
        <Children>
            <Info>
                <Name>
                    <label id="chname"/>
                </Name>
            </Info>
        </Children>
        <Children>
            <Info>
                <Name>
                    <label id="chname"/>
                </Name>
            </Info>
        </Children>
        <Children>
            <Info>
                <Name>
                    <label id="chname"/>
                </Name>
            </Info>
        </Children>
    </Parent>
</Grandparent>

...降伏します...

<Grandparent>
  <Parent>
    <Children>
      <Info>
        <Name>
          <label text="1" id="chname" />
        </Name>
      </Info>
    </Children>
    <Children>
      <Info>
        <Name>
          <label text="2" id="chname" />
        </Name>
      </Info>
    </Children>
    <Children>
      <Info>
        <Name>
          <label text="3" id="chname" />
        </Name>
      </Info>
    </Children>
  </Parent>
</Grandparent>
于 2012-12-10T11:38:02.430 に答える
1

子テンプレートによって設定されたパラメーターのトンネリング (XSLT 2.0 機能):

<xsl:template match="Children">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()">
            <xsl:with-param name="childPosition" select="position()" tunnel="yes"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

<xsl:template match="Children/Info/Name/label">
    <xsl:param name="childPosition" tunnel="yes"/>
    <xsl:copy>
        <xsl:attribute name="text">
            <xsl:value-of select="$childPosition"/>
        </xsl:attribute>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
于 2012-12-10T08:13:38.190 に答える
0

これを試して:

  <xsl:variable name="childCtr" select="count(ancestor::Children/preceding-sibling::Children)"/>
于 2012-12-10T10:39:59.967 に答える