gpt4 book ai didi

Python XML 解析无法找到 child 的 child

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

我正在尝试解析从 http get 请求作为字符串返回的 XML。我需要获取 XML 结构内的特定链接,但由于某种原因我无法获取所需的链接。我尝试了**枚举** XML 并打印child.attrib,但我需要的链接未显示。

我需要找到一个元素,它是子元素的子元素,并且该元素称为 Vm,然后我需要获取该元素的 .attrib。

因此,我做了更多研究并尝试通过节点名称查找我需要的 XML

XML 结构为:

<vapp>
<link></link>
<othertags></othertags>
<Children>
<Vm href='link I need'>
<other tag options>
</other tag options>
</vm>
</Children>
</vapp>

Python 代码:

for i, child in enumerate(vappXML):
if 'href' in child.attrib and 'name' in child.attrib:
vapp_url = child.attrib['href']

r=requests.get(vapp_url, headers = new_headers)
vmlinkXML = fromstring(r.content)

for VM in vmlinkXML.findall('Children'):
print VM

for i, child in enumerate(vmlinkXML):
if 'vm-' in child:
print child.attrib

if 'href' in child.attrib:
vm_url = child.attrib['href']
if 'vm-' in vm_url:
print vm_url

无论我如何尝试,都无法访问该网址。我只得到 vApp 的主要子级,它从不解析标签,或者更确切地说,我的代码永远不会比 vapp 的第一个子级更进一步,我不知道为什么。

我想我没说清楚。我正在解析作为字符串返回的 vCloud Director Rest API XML。第一级是 vApp 链接,它本质上是虚拟机的容器。我需要获取每个 vApp 下的 VM 链接。第一个将选择 vApp 链接并查询它们。

一旦它在 vApp 链接上发出 get 请求,它就会获取下一级的 XML 数据,这就是我上面放置的结构。因此它会传递初始 XML 语句并返回 vApp 信息。

即使当我从 vmlinkXML 打印出每个 child.attrib 时,与 vm 的链接也不会被打印。但是,如果我只打印 r.content 链接就在那里。这几乎就像 XML 解析器看不到标签一样。

我正在使用 Python XML.etree

from lxml import etree
from xml.etree.ElementTree import XML, fromstring, tostring

所以要清楚,结构是:

获取 vApp 链接/api/admin/extension/vapps/query那么返回的信息将包含 vCloud 中每个 vapp 的链接。然后我调用 vApp 链接 https://vcloud.test.co/api/vApp/vapp-3b4980e7-c5ab-4462-9cfe-abc6292c15748它会返回类似于这样的结构:

<vapp>
<link></link>
<othertags></othertags>
<Children>
<Vm href='link I need'>
<other tag options>
</other tag options>
</vm>
</Children>
</vapp>

标签包含我需要查询的下一级链接。然而,带有 child.attrib 的 XML 解析器永远不会在标签下输出任何内容。

最佳答案

已解决***

r=requests.get(url + '/api/admin/extension/vapps/query', headers = new_headers)
vappXML = fromstring(r.content)
for i, child in enumerate(vappXML):
if 'href' in child.attrib and 'name' in child.attrib:
vapp_url = child.attrib['href']

r=requests.get(vapp_url, headers = new_headers)
DOMTree = parseString(r.content)
vmElements = DOMTree.documentElement
VMS = vmElements.getElementsByTagName("Vm")

for vm in VMS:
if vm.hasAttribute("href"):
vm_link = vm.getAttribute("href")
print vm_link

关于Python XML 解析无法找到 child 的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234620/

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