XPath选择某个元素

时间:2018-03-28 16:53:42

标签: python xpath

我现在已经尝试了几个小时来选择某个元素,但似乎无法做到......

这是我的代码:

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的其他部分是必需的。

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

public class Recipe { public int RecipeID { get; set; } public string RecipeName { get; set; } public int UserID { get; set; } [JsonIgnore] public virtual User User { get; set; } }

如果您需要获取节点值,请在表达式的末尾添加/plist/dict/array/dict[1]/array/dict/array/dict[1]/dict[1]/integer[2]

此致

答案 1 :(得分:1)

这应该有效:

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)

我像你的例子那样用值谓词改变了位置。我只使用了一个表达式,你可以随意拆分它。

整个表达:/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()