Skip to main content
 首页 » 编程设计

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

2025年05月04日16jillzhang

我尝试用代码解析 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') 

当我打印结果时,我得到了所有的 xml 文件,这没问题,但最后一行 ( xml.findtext) 总是返回 None (我有带有类型和值 mstp 的标签)。有人可以帮我吗? 我在 StackOverflow 上浏览过

How to parse xml in Python on Google App Engine但我没有得到 (.//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> 

请您参考如下方法:

这与 namespace 无关。

问题 1:type 不是标签,它是标签为 datalink 的元素的 attribute。

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

你想要的是:

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

输出:

<Element 'datalink' at 0x019D0AB8> 
mstp