gpt4 book ai didi

Python lxml - 无法到达父级

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:34 25 4
gpt4 key购买 nike

我有一个需要搜索的 xml 树:

<instance>
<hostName>hostname1</hostName>
<port enabled="true">9010</port>
<metadata>
<branch>master</branch>
</metadata>
<vipAddress>vip.address.com</vipAddress>
</instance>
<instance>
<hostName>hostname2</hostName>
<port enabled="true">9011</port>
<metadata>
<branch>sub_branch</branch>
</metadata>
<vipAddress>vip2.address.com</vipAddress>
</instance>

我试图通过分支中的文本进行搜索,然后获取祖 parent 元素并获取 vipAddressport 但是当我尝试使用下面的代码时并打印 vipAddressport 它会打印所有这些内容,而不是我实际要查找的内容:

branch_name = 'master'    
for record in tree.xpath('//branch/text()'):
if(record == branch_name):
branch = record.getparent()
target_environment = branch.xpath('//vipAddress/text()')
print(target_environment)
target_port = branch.xpath('//port/text()')

示例:

如果我要搜索 master 而不是返回 target_environment=vip.address.comport=9011 它将返回 target_environment=[vip.address.com, vip2.address.com]port=[9010,9011]

我确信我做错了一些简单的错误,我只是看不出是什么。

最佳答案

我不是最擅长在 python 中使用 xml,但我确实看到了一些问题:

for record in tree.xpath('//branch/text()'):将分支元素转换为字符串,您可以使用它进一步与 branch_name 进行比较。字符串没有 getparent()方法,因此您可能需要删除 text()从 xpath 并比较 branch_namerecord.text

一旦您的record是一个元素,调用getparent()记录两次将为您提供它的祖 parent 元素 instance 。我确信有更好的方法可以做到这一点,但它似乎有效。

.xpath('//')在任何地方搜索与查询匹配的项目。因为您只想要 <instance> 的子元素, branch.xpath('vipAddress/text()')应该做。查找 target_port 也是如此。

而且我认为 .xpath 总是返回一个列表,所以即使这一切都有效,你的 port看起来像 [9011]

把它们放在一起,我得到类似的东西:

branch_name = 'master'
for record in tree.xpath('//branch'):
if(record.text == branch_name):
branch = record.getparent().getparent()
target_environment = branch.xpath('vipAddress/text()')
print(target_environment)
target_port = branch.xpath('port/text()')
print(target_port)

关于Python lxml - 无法到达父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42334662/

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