gpt4 book ai didi

python - 使用 lxml 在 xml 中进行复杂搜索

转载 作者:行者123 更新时间:2023-12-01 03:40:41 25 4
gpt4 key购买 nike

背景 我正在尝试使用libkeepass从keepass2文件中读取密码。 python 库。

使用lxml (因为这就是 libkeepass 给我的)我必须搜索这样的条目并从中获取密码值

<Entry>
<String>
<Key>Password</Key>
<Value Protected="False" ProtectedValue="XXX">XXX</Value>
</String>
<String>
<Key>Title</Key>
<Value>PasswordName</Value>
</Entry>

所以我必须找到一个条目:

  • 和一个 child “String”
    • 具有值为“Title”的子“Key”
    • 子项“Value”的值为“PasswordName”
  • 和一个 child “String”
    • 子“Key”的值为“Password”
    • 有一个 child “Value”->并且该 child 的值(value)就是我所需要的

我已经做到了这一点(kdb 是密码文件对象):

kdb.obj_root.findall(".//Entry/String[Key='Title'][Value='PasswordName']")

这给了我正确条目的字符串元素。

最佳答案

或者,您可以只使用谓词,而不是向下到 String,返回到 Entry,然后再次向下到另一个 String Entry 元素,然后从那里返回目标 String 元素。

由于您使用的是lxml,我还建议使用xpath()方法而不是findall()。前者提供对XPath 1.0表达式的完整支持,而后者仅支持subset of XPath 1.0 :

query = """
.//Entry[String[Key='Title' and Value='MyPassword']]
/String[Key='Password']
/Value
"""
kdb.obj_root.xpath(query)

关于python - 使用 lxml 在 xml 中进行复杂搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com