Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XML从CDATA之间的文件获取IP_Python_Xml - Fatal编程技术网

Python XML从CDATA之间的文件获取IP

Python XML从CDATA之间的文件获取IP,python,xml,Python,Xml,我有一个XML转储文件,我想为第一次出现的'ETH0_IP'解析它。然而,cdata字段让我感到困惑。它最终返回“无”。文件中还有其他IP,但我不关心这些 到目前为止,我有这样的想法: q = etree.parse(outputfile) fileoutputip = q.findtext("ETH0_IP") 这是XML: <VM> <ID>####</ID> <UID>0</UID> <GID>0

我有一个XML转储文件,我想为第一次出现的'ETH0_IP'解析它。然而,cdata字段让我感到困惑。它最终返回“无”。文件中还有其他IP,但我不关心这些

到目前为止,我有这样的想法:

  q = etree.parse(outputfile)
  fileoutputip = q.findtext("ETH0_IP")
这是XML:

<VM>
  <ID>####</ID>
  <UID>0</UID>
  <GID>0</GID>
  <UNAME>####</UNAME>
  <GNAME>###</GNAME>
  <NAME>###</NAME>
  <PERMISSIONS>
    <OWNER_U>1</OWNER_U>
    <OWNER_M>1</OWNER_M>
    <OWNER_A>0</OWNER_A>
    <GROUP_U>0</GROUP_U>
    <GROUP_M>0</GROUP_M>
    <GROUP_A>0</GROUP_A>
    <OTHER_U>0</OTHER_U>
    <OTHER_M>0</OTHER_M>
    <OTHER_A>0</OTHER_A>
  </PERMISSIONS>
  <LAST_POLL>1461191030</LAST_POLL>
  <STATE>3</STATE>
  <LCM_STATE>3</LCM_STATE>
  <PREV_STATE>3</PREV_STATE>
  <PREV_LCM_STATE>3</PREV_LCM_STATE>
  <RESCHED>0</RESCHED>
  <STIME>1461189864</STIME>
  <ETIME>0</ETIME>
  <DEPLOY_ID>###</DEPLOY_ID>
  <MEMORY>###</MEMORY>
  <CPU>0</CPU>
  <NET_TX>1000</NET_TX>
  <NET_RX>73254</NET_RX>
  <TEMPLATE>
    <AUTOMATIC_REQUIREMENTS><![CDATA[!(PUBLIC_CLOUD = YES)]]></AUTOMATIC_REQUIREMENTS>
    <CONTEXT>
      <DISK_ID><![CDATA[1]]></DISK_ID>
      <ETH0_DNS><![CDATA[####]]></ETH0_DNS>
      <ETH0_GATEWAY><![CDATA[###]]></ETH0_GATEWAY>
      <ETH0_IP><![CDATA[10.**.***.**]]></ETH0_IP>

####
0
0
####
###
###
1.
1.
0
0
0
0
0
0
0
1461191030
3.
3.
3.
3.
0
1461189864
0
###
###
0
1000
73254
q.findtext(“ETH0\u IP”)
将尝试在树的根元素下直接查找
ETH0\u IP
元素,在这种情况下,它将导致
None
,因为
VM
没有直接的
ETH0\u IP
子元素

您可以通过向
find()
findtext()
提供XPath表达式(在树中的任何位置查找
ETH0\u IP
元素)或直接使用
XPath()
方法来解决此问题:

>>> from lxml import etree
>>> 
>>> tree = etree.parse("input.xml")
>>> print(tree.find(".//ETH0_IP").text)
10.**.***.**
>>> print(tree.findtext(".//ETH0_IP"))
10.**.***.**
>>> print(tree.xpath("//ETH0_IP")[0].text)
10.**.***.**

@不客气。我还为答案添加了一些更相关的信息,请查看。