2017-10-12 1 views
0

Wie bekomme ich die relative Position eines Knotens in einem bestimmten XML. Ich möchte nur "b" Knoten in "a" Knoten nicht in x-> y -> b betrachten, ich bekomme b zählen als 1,2,3,4 nicht 3,4,5,6. Ich habe "multiple" und "any" in xsl: number ausprobiert, funktioniert aber nicht.XSL Geschwisterzahl

<x> 
    <y> 
     <b></b> 
     <b></b> 
    </y> 
    </x> 
    <a> 
     <b></b> 
     <b></b> 
    </a> 
    <a> 
    <b></b> 
    <b></b> 
    </a> 

<xsl:for-each select="a"> 
      <dummy> 
      <xsl:for-each select="b"> 
       <xsl:variable name="pos" select="position()" /> 
       <dummy2><xsl:number level="any"/></dummy2> 
      </xsl:for-each> 
      </dummmy> 
</xsl:for-each> 

Ich erwarte, dass Dummy2 1,2,3,4 Werte hat.

<dummy> 
    <dummy2>1<dummy2> 
    <dummy2>2<dummy2> 
</dummmy> 
<dummy> 
    <dummy2>3<dummy2> 
    <dummy2>4<dummy2> 
</dummmy> 

Antwort

0

Try This:

<xsl:for-each select="a"> 
     <dummy> 
      <xsl:for-each select="b"> 
       <dummy2><xsl:value-of select="count(preceding::b[parent::a])+1" /></dummy2> 
      </xsl:for-each> 
     </dummy> 
    </xsl:for-each> 
+0

'preceding :: b [parent :: a]' könnte ein Match 'x/y/a/b'. Abhängig von der erlaubten XML-Struktur könnte man versuchen, "count (previous :: b [./ parent :: a = current()/parent :: a]) + 1" zu berechnen, aber ich habe jetzt Zweifel, ob zwei Knoten in XPath gleich sind (Es ist eine Weile her, dass ich nicht etwas gemacht habe!) – Xenos

3

Sie können dies noch tun mit xsl:number.

Try this ...

<dummy2><xsl:number level="any" count="b[parent::a]" /></dummy2> 

Oder vielleicht dieses ...

<dummy2><xsl:number level="any" count="a/b" /></dummy2>