Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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解析问题-找不到findtext_Python - Fatal编程技术网

Python中的XML解析问题-找不到findtext

Python中的XML解析问题-找不到findtext,python,Python,我试图用代码解析XML import urllib2 from xml.etree import ElementTree if __name__ == '__main__': print 'hello' result = urllib2.urlopen('http://localhost/conf.xml').read() xml = ElementTree.fromstring(result) print result print xml.findte

我试图用代码解析XML

import urllib2
from xml.etree import ElementTree

if __name__ == '__main__':
    print 'hello'
    result = urllib2.urlopen('http://localhost/conf.xml').read()
    xml = ElementTree.fromstring(result)
    print result
    print xml.findtext('.//type')
当我打印Result时,我得到了所有的xml文件,这是可以的,但最后一行(xml.findtext)总是返回None(我有一个带有类型和值mstp的标记)。有人能帮我吗? 我看了看电影

但是我不会用(.//type)得到结果

有一个xml文件

<router>
  <datalink
    type="mstp"
    network="13"
    mac="18"
    hopcount="8">
    <mqueue
      name="/mstp1"
      msgnum="10"
      msgsize="768"
    />
    <mstp
      port="/dev/ttySx"
      baud="9600|19200|38400|76800"
      Nmax_info_frames="1+"
      Nmax_master="127-"
      Npoll="50"
      Nretry_token="1"
      Nmin_octets="4"
      Tframe_abort="60-100"
      Tframe_gap="20"
      Tno_token="500"
      Tpostdrive="15"
      Treply_delay="250"
      Treply_timeout="255-300"
      Troff="29-40"
      Tslot="10"
      Tturnaround="40"
      Tusage_delay="15"
      Tusage_timeout="20-100"
    />
  </datalink>
  <datalink
    type="bip"
    network="12"
    mac="192.168.0.146:47808"
    hopcount="8"
    >
    <mqueue
      name="/bip1"
      msgnum="10"
      msgsize="2048"
    />
    <bip
      bbmd="address|self|none"
      bmask="bmask"
    >
      <bbmd
    edit="yes|no"> <!-- dozvoljeno menjanje tabele -->
    <bdt address="192.168.0.131:0xBAC0:192.168.0.255"/> <!-- adresa:port:bmask -->
    <bdt address="192.168.0.157:0xBAC0:192.168.0.255"/>
      </bbmd>
    </bip>
  </datalink>
  <network
    unavailable="90%"
    available="40%"
    hop-dec="1">
    <mqueue
      name="/network"
      msgnum="40"
      msgsize="2048"
    />
    <!--  -->
    <hrpolicy
      general="ignore|activate|performance|demand"
      performance="num"
      conntime="num"
    />
  </network>
  <application>
    <mqueue
      name="/application"
      msgnum="10"
      msgsize="2048"
    />
  </application>
</router>

elementtree有使用命名空间标识符的坏习惯。我猜您的xml文件具有名称空间,因此您的搜索必须如下所示:

print xml.findtext('.//{http://really-long-namespace.uri}type')
看,有一些方法可以解决这个问题


/编辑:当问题中没有提供xml时,我把这个答案发了回来。

elementtree有使用名称空间标识符的坏习惯。我猜您的xml文件具有名称空间,因此您的搜索必须如下所示:

print xml.findtext('.//{http://really-long-namespace.uri}type')
看,有一些方法可以解决这个问题


/编辑:当问题中没有提供xml时,我把这个答案发了回来。

在xml
中,type
不是一个标记,而是一个属性
findtext('.//type')
在xml中的任何位置查找名为type的标记。如果找到,则返回标记的.text()。在xml中获取类型。你可以这样做

xml = ElementTree.fromstring(result)
datalink = xml.find('.//datalink')
type = datalink.get('type')

在xml中,type不是一个标记,而是一个属性
findtext('.//type')
在xml中的任何位置查找名为type的标记。如果找到,则返回标记的.text()。在xml中获取类型。你可以这样做

xml = ElementTree.fromstring(result)
datalink = xml.find('.//datalink')
type = datalink.get('type')

这与名称空间无关

问题1:
type
不是标记,它是标记为
datalink
的元素的
属性

问题2:
xml.findtext()
返回元素的
text
组件;那不是你想要的

您想要的是:

elem = xml.find(".//datalink")
print repr(elem)
print elem.get("type")
输出:

<Element 'datalink' at 0x019D0AB8>
mstp

mstp

这与名称空间无关

问题1:
type
不是标记,它是标记为
datalink
的元素的
属性

问题2:
xml.findtext()
返回元素的
text
组件;那不是你想要的

您想要的是:

elem = xml.find(".//datalink")
print repr(elem)
print elem.get("type")
输出:

<Element 'datalink' at 0x019D0AB8>
mstp

mstp

您能同时提供conf.xml文件的内容吗?您能同时提供conf.xml文件的内容吗?愚蠢的问题:您确实用元素的正确名称空间替换了我使用的虚拟名称空间,是吗?-1这是一个好习惯,不是一个讨厌的习惯(2)没有名称空间问题愚蠢的问题:您确实用元素具有的正确名称空间替换了我使用的虚拟名称空间,是吗?-1这是一个好习惯,不是一个讨厌的习惯(2)没有名称空间problem@John梅辛。对不起,约翰,忘记编辑了。不应该被发现findtext@John梅辛。对不起,约翰,忘记编辑了。应该是find而不是findtext