Python XML解析可以';我找不到孩子的孩子

Python XML解析可以';我找不到孩子的孩子,python,xml,rest,vcloud-director-rest-api,Python,Xml,Rest,Vcloud Director Rest Api,我正在尝试解析作为字符串从http get请求返回的XML。我需要在XML结构中获取一个特定的链接,但由于某些原因,我无法获取所需的链接。 我尝试了**枚举**XML并打印child.attrib但是我需要的链接没有显示出来 我需要找到一个元素,它是一个子元素的子元素,该元素名为Vm,然后我需要获取该元素的.attrib 因此,我做了更多的研究,并试图通过节点名找到所需的XML XML结构是: <vapp> <link></link> <ot

我正在尝试解析作为字符串从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>
无论我如何尝试,我都无法访问url。我只得到了vApp的主子级,它从不解析标记,或者更确切地说,我的代码从来没有超过vApp的第一个子级,我不知道为什么

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

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

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

我正在使用pythonsxml.etree

from lxml import etree
from xml.etree.ElementTree import XML, fromstring, tostring
因此,要明确的是,结构是:

获取vApp链接/api/admin/extension/vapps/query 然后,返回的信息将包含指向vCloud中每个vapp的链接。 然后我调用vApp链接 它将返回类似于以下内容的结构:

<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

如果child.attrib中的'href'和child.attrib中的'name:
-顶级标记都没有这两个属性(更不用说这两个了)。你永远都无法通过这里。你使用的是哪种xml解析器?诸如
Children/Vm/@href
之类的xpath表达式可能会为您提供所需的内容。@tdelaney为您增加了一些清晰度
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