我现在已经尝试了几个小时来选择某个元素,但似乎无法做到......
这是我的代码:
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的其他部分是必需的。
答案 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()