基于lxm的xml复杂搜索

2024-05-18 19:55:21 发布

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

背景我试图使用libkeepasspython库从keepass2文件中读取密码。在

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

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

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

  • 带着孩子的“绳子”
    • 带有值为“Title”的子“Key”
    • 子“Value”的值为“PasswordName”
  • 带着孩子的“绳子”
    • 带有值为“Password”的子“Key”
    • 有了孩子的“价值”->;而这个孩子的价值正是我所需要的

我已经做了这么多(kdb是密码文件对象):

^{pr2}$

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


Tags: key密码stringtitlevalue孩子条目password
2条回答

或者,您可以在Entry元素上使用谓词,然后从那里返回目标元素String,而不是向下到Entry,然后返回目标String元素。在

因为您使用的是lxml,所以我建议您使用xpath()方法,而不是{}。前者完全支持XPath1.0表达式,而后者仅支持subset of XPath 1.0

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

我刚意识到,我可以用“.”导航。所以解决办法是:

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

相关问题 更多 >

    热门问题