选择某些元素

2024-04-23 08:33:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经试了几个小时来选择某个元素,但似乎做不到。。。你知道吗

这是我的密码:

import lxml.etree as etree
import sys
import re
import os

doc = etree.parse(open("patches.plist"))
for app_dict in doc.xpath('/plist/dict/array/dict'):
    for method_dict in app_dict.xpath('.//dict[key="overrides"]/array/dict'):
        for return_dict in method_dict.xpath('.//dict[key="overrides"]/array/dict'):
        returnValue = method_dict.xpath('//key[.="argument"]/following-sibling::string[1]/text()')[0]
        print(returnValue)

这就是我试图选择元素/从中获取值的内容,我已经用// THIS VALUE IS WHAT I WANT注释了我试图捕获的内容

链接: https://ghostbin.com/paste/68ffu

注意:有些进口可能不需要,但请忽略这一点。在.py的其他部分需要它们。你知道吗


Tags: keyinimportapp元素fordocarray
2条回答

这应该可以做到:

/plist/dict/array/dict[1]/array/dict/array/dict[1]/dict[1]/integer[2]

如果需要获取节点值,请在表达式末尾添加/text()。你知道吗

谨致问候

这应该起作用:

import lxml.etree as etree
import sys
import re
import os

doc = etree.parse(open("patches.plist"))
for app_dict in doc.xpath('//dict[key="subtype" and key="type"]/integer[preceding-sibling::key[text()="type"]]/text()'):
        print(app_dict)

我用predicate on value改变了位置,就像你的例子一样。我只用了一个表达,你可以根据需要把它分开。你知道吗

整个表达式:/plist/dict/array/dict/array/dict[key="overrides"]/array/dict[key="argument"]/dict[key="subtype" and key="type"]/integer[preceding-sibling::key[text()="type"]]/text()

相关问题 更多 >