Python XML分析找不到子级的子级

2024-10-02 10:20:13 发布

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

我试图解析从httpget请求返回的作为字符串的XML。我需要在XML结构中获取一个特定的链接,但是由于某些原因,我无法获得所需的链接。 我尝试了**enumerating**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代码:

^{pr2}$

无论我如何尝试,我都无法访问该网址。我只得到了vApp的主子元素,它从不解析标记,或者说我的代码从来没有比vApp的第一个子级更进一步,我不知道为什么。在

我想我不太清楚。我正在解析作为字符串返回的vCloud Director restapi XML。第一级是vApp-link,它本质上是vm的容器。我需要在每个vApp下得到VM链接。第一个程序将选择vApp链接并查询它们。在

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

即使我打印出儿童属性fom vmlinkXML与vm的链接不会打印。但是,如果我只是打印r.content链接就在那里。就像XML解析器看不到标记一样。在

我在用PythonXML.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>

标记包含我需要查询的下一级链接。但是XML解析器儿童属性从不输出标签下的任何内容。在


Tags: 标记元素链接taglinkvmxml结构
1条回答
网友
1楼 · 发布于 2024-10-02 10:20:13

解决***

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

相关问题 更多 >

    热门问题