Python ElementTree“未找到元素”异常

Posted

技术标签:

【中文标题】Python ElementTree“未找到元素”异常【英文标题】:Python ElementTree "no element found" exception 【发布时间】:2014-05-24 23:16:09 【问题描述】:

大家好。

我正在尝试使用 ElementTree 读取、解析和使用 xml 文件。 以下数据:

<level>
    <leveldata>
        <level name="hh" difficulty="Easy" lenght="3600">
            <meteorite chance="4" speed="3" >
                <image id="1">
                <image id="2">
                <image id="3">
            <meteorite />
            <meteorite chance="4" speed="3" >
                <image id="4">
                <image id="5">
                <image id="6">
            <meteorite />
        <level />
    <leveldata />
    <meteorimages>
        <meteor id="5" imagepath="res\meteorit_1.png">
        <meteor id="5" imagepath="res\meteorit_2.png">
        <meteor id="5" imagepath="res\meteorit_3.png">
    <meteorimages />
<datasheet />
<level />

可悲的是,我 ElementTree 给了一个例外!!!使用以下代码读取文件:

import xml.etree.ElementTree as ET
***code***
tree = ET.parse("res\\data.xml")
root = tree.getroot()

例外:

File "E:\blabla\core.py", line 26, in load_levelproperties
    *tree = ET.parse("res\\data.xml")*   File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line
1182, in parse
    *tree.parse(source, parser)*   File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line
657, in parse
    *self._root = parser.close()*   File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line
1654, in close
    *self._raiseerror(v)*   File "E:\Programme(x86)\Python2.7x86\lib\xml\etree\ElementTree.py", line
1506, in _raiseerror
    ***raise err xml.etree.ElementTree.ParseError: no element found: line 16, column 9***

我不知道出了什么问题,我尝试以我能想象到的所有可能方式更改 data.xml,没有区别。它始终是文件的最后一行! 我究竟做错了什么? 谢谢!

【问题讨论】:

【参考方案1】:

您的 XML 格式不正确,ElementTree 无法解析它 - 它看起来确实像是真实文档的一部分。

格式化后会得到以下结果:

<level>
    <leveldata>
        <level name="hh" difficulty="Easy" lenght="3600">
            <meteorite chance="4" speed="3">
                <image id="1">
                    <image id="2">
                        <image id="3">
                            <meteorite/>
                            <meteorite chance="4" speed="3">
                                <image id="4">
                                    <image id="5">
                                        <image id="6">
                                            <meteorite/>
                                            <level/>
                                            <leveldata/>
                                            <meteorimages>
                                                <meteor id="5" imagepath="res\meteorit_1.png">
                                                    <meteor id="5" imagepath="res\meteorit_2.png">
                                                        <meteor id="5" imagepath="res\meteorit_3.png">
                                                            <meteorimages/>
                                                            <datasheet/>
                                                            <level/>

【讨论】:

“格式”是什么意思?我该怎么做才能更好? @user3424423 我刚刚缩进了 xml,以便更容易看出 xml 的结构不正确。 Elementtree 无法处理。 这对我一点帮助都没有。我还需要做什么才能做得更好? 为了澄清上面的旧答案,任何人现在绊倒它:“关闭”标签是错误的 而不是 - 这会创建一个新标签,嵌套在预计将被关闭,而不是关闭它。将 / 移动到标签名称的前面将纠正部分问题,并为其他条目添加关闭标签。【参考方案2】:

您的标签未正确关闭。例如,要关闭“陨石”标签,请使用&lt;/meteorite&gt; 而不是&lt;meteorite /&gt;

【讨论】:

以上是关于Python ElementTree“未找到元素”异常的主要内容,如果未能解决你的问题,请参考以下文章

Python ElementTree默认命名空间?

python-23 xml.etree.ElementTree模块

Python:XPath 在 ElementTree 中不可用

python模块之xml.etree.ElementTree

python Python.XML.ElementTree

python Python.XML.ElementTree