具有值的節點的索引列表;如何使用xpath獲取使用xpath
<a>
<b>false</b>
<b>true</b>
<b>false</b>
<b>false</b>
<b>true</b>
</a>
欲使用類似 /a/b來得到以下結果[。= '真']。對於像 2,5(作爲對2集合中的結果位置() 位置)
具有值的節點的索引列表;如何使用xpath獲取使用xpath
<a>
<b>false</b>
<b>true</b>
<b>false</b>
<b>false</b>
<b>true</b>
</a>
欲使用類似 /a/b來得到以下結果[。= '真']。對於像 2,5(作爲對2集合中的結果位置() 位置)
I.的XPath 1.0溶液:
使用:
count(/*/*[.='true'][1]/preceding-sibling::*)+1
這產生第一b
元件的其字符串值是 「真」 的位置:
2
重複相似的表達的評估,其中[1]
是替換爲[2]
,...等,最高爲count(/*/*[.='true'])
XSLT - 基於驗證:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="/*/*[.='true']">
<xsl:variable name="vPos" select="position()"/>
<xsl:value-of select=
"count(/*/*[.='true'][$vPos]
/preceding-sibling::*) +1"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
當這種變換所提供的XML文檔應用:
<a>
<b>false</b>
<b>true</b>
<b>false</b>
<b>false</b>
<b>true</b>
</a>
The XPath expression is constructed and evaluated for every
b , whose string value is
「真」 . The results of these evaluations are copied to the output
:
2
5
二,的XPath 2.0溶液:
使用:
index-of(/*/*, 'true')
XSLT 2.0 - 基於驗證:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select="index-of(/*/*, 'true')"/>
</xsl:template>
</xsl:stylesheet>
當該XSLT 2.0變換對相同的XML文檔應用(上述),將評估XPath 2.0表達式,並將此評估的結果複製到輸出:
2 5
在python語言的基本(&工作)的方法:
from lxml import etree
root = etree.XML("""
<a>
<b>false</b>
<b>true</b>
<b>false</b>
<b>false</b>
<b>true</b>
</a>
""")
c = 0
lst = []
for i in root.xpath('/a/b/text()'):
c+=1
if i == 'true':
lst.append(str(c))
print ",".join(lst)
最終做了一個xslt,在所有事情上打了一個ID,所以這個問題變得微不足道了。 –