【发布时间】:2014-02-22 03:23:25
【问题描述】:
我正在尝试在 python 中使用 xml.etree.ElementTree,但它适用于示例代码,但不适用于我的其他代码。
例如: XML 文件:程序在这个 XML 文件中运行良好:
<?xml version="1.0"?>
<data>
<country name="Liechtenstein">
<rank>1</rank>
<year>2008</year>
<gdppc>141100</gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
程序:
import xml.etree.ElementTree as ET
tree = ET.parse('country.xml')
root = tree.getroot()
for page in root.findall('country'):
print("inside")
输出:
inside
inside
inside
这不适用于以下程序:
XML 文件: **程序无法使用以下 XML 文件**
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="en">
<siteinfo>
<sitename>Wikipedia</sitename>
<base>http://en.wikipedia.org/wiki/Main_Page</base>
<generator>MediaWiki 1.23wmf11</generator>
<case>first-letter</case>
<namespaces>
<namespace key="-2" case="first-letter">Media</namespace>
</namespaces>
</siteinfo>
<page>
<title>Affirming the consequent</title>
<ns>0</ns>
<id>675</id>
</page>
</mediawiki>
代码:
import xml.etree.ElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
for page in root.findall('page'):
print("inside")
输出:No Output.
我发现原因是mediawiki 标签中的属性。但我无法在我的示例数据中避免该标签。有没有办法让这个工作。
【问题讨论】:
-
不,还是一样。当我从
中删除所有属性时,它会处理。
标签: xml python-3.x xml-parsing