提取多个类似标记之一'命名为'值[Python-lxml]

时间:2017-02-13 08:11:10

标签: python xpath lxml

以下是示例XML代码段。我需要获得值" ABCD"

sample.xml中

 <layer>
    <value>Random</value>
    <value>12345</value>
    </layer>
    <layer>
    <value>Last_Name</value>
    <value>ABCD</value>
    </layer>
    <layer>
    <value>dynamic</value>
    <value>a1234bcd</value>
    </layer>

Sample.py

from lxml import etree
tree = etree.parse('sample.xml')
print tree.xpath('//layer[value="Last_Name"]/value')[0].text  #returns **"Last_Name"**
# Xpath : //layer/value[text()='Last_Name']/value # This also didn't work

如何提取其中一个相同标签的值?

2 个答案:

答案 0 :(得分:1)

tree.xpath('//layer[value="Last_Name"]/value')[1].text

xpath将出租:

[<value>Last_Name</value>,
<value>ABCD</value>]

ABCD在索引1

答案 1 :(得分:0)

您好我已经修改了您的XML文件并将其包含在一个名为tag

的标签中 #
<data>
<layer>
    <value>Random</value>
    <value>12345</value>
</layer>
<layer>
    <value>Last_Name</value>
    <value>ABCD</value>
</layer>
<layer>
    <value>dynamic</value>
    <value>a1234bcd</value>
</layer>
</data>

现在这是一个示例python程序。

####### Python代码
import xml.etree.ElementTree as ET
tree = ET.ElementTree(file="filename.xml")

root = tree.getroot()
for child in root:
    for attr in child:
            if(attr.tag == 'value'):
                print(attr.text)