2017-10-12 66 views
0

如何获取给定XML中节点的相对位置。我想只考虑“a”节点中的“b”节点,而不是x-> y - > b,我将b计数为1,2,3,4而不是3,4,5,6。我尝试过在xsl:number中使用“multiple”和“any”,但不起作用。XSL sibling count

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

我期望dummy2具有1,2,3,4值。

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

回答

0

试试这个:

<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

'B [父::一]'会比前一个::'X/Y/A/B'。根据允许的XML结构,可以尝试'count(之前:: b [./ parent :: a = current()/ parent :: a])+ 1',但是现在我怀疑是否在XPath中等于两个节点(这是一段时间,我没有做一些!) – Xenos

3

你仍然可以做到这一点与xsl:number

尝试......

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

或者,也许这...

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