如何使用python ElementTree在XML中搜索文本并提取它所属的整个节点

时间:2014-10-29 09:41:59

标签: python xml

我拥有的是:

我知道" 12345"存在于整个xml中,但在不同的节点下。我想搜索" 12345"并提取它所属的节点块。所以在这里," 12345"在"评级"但是xml中的其他地方是"描述"。

以下代码仅搜索评分,但如何搜索" 12345"并提取它所包含的块?

       `<Rating action="set">
            <details>12345</details>
            <media>compact disk</media>
            <region>GRE</region>
            <sequence>1</sequence>
            <flag>0</flag>
        </Rating>`

for Rating in root.findall('.//{xmlsheading}Rating'): value_found = False for details in Rating.findall('.//{xmlsheading}details'): if details.text == name: value_found = True break if value_found: print ET.tostring(Ratings)

1 个答案:

答案 0 :(得分:0)

我用它来获取我需要的信息。

示例查询返回父节点,其中子元素 akey = 12345

查询是与该查询匹配的所有父元素

from lxml import etree


name = '12345'

tree =   etree.parse('C:/Users/file.xml')
root = tree.getroot()


query = root.xpath('//ns:akey[text()="12345"]/..', namespaces={'ns': 'URN:XXX:XXXX:XXX:ADP:0001'})
for parent in query:
    print "" + '\n' + parent.tag
    child = parent.getchildren()
    for kid in child:
        p = kid.tag + " " + kid.text