【问题标题】:Unable to use xml.etree.ElementTree in python无法在 python 中使用 xml.etree.ElementTree
【发布时间】: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


【解决方案1】:

试试这个...

for page in root.findall('{mediawiki.org/xml/export-0.8}page'):
    print(page)

【讨论】:

  • 第一个代码是正确的。我不想显示内容。在第二个 XML 文件中,我没有看到任何输出。
  • 尝试print tree.getchildren() 看看包含 xmlns 的标签是什么样子的。它将发出不推荐使用的警告,但应产生标签名称。
  • 显示子元素。尝试查看第二个 xml 文件和程序。仅当我从 MEDIAWIKI 标记中删除所有属性时,第二个程序才有效。我哪里错了?
  • [mediawiki.org/xml/export-0.8}siteinfo' at 0x00000000024D6548>, mediawiki.org/xml/export-0.8}page' at 0x00000000024DB278>] 这是getchildren()的显示
  • 将完整的命名空间添加到 findall 对我有用:“root.findall('{mediawiki.org/xml/export-0.8}page')”,但是我不知道如何告诉 ElementTree 将其用作默认允许“root.findall('page')”。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多