5

我正在使用 Python (xml.dom.minidom) 解析 XML,但无法获取节点的 tagName。

解释器正在返回:

AttributeError: Text instance has no attribute 'tagName' 

当我尝试从节点中提取(例如)字符串“格式”时:

<format>DVD</format>

我在 Starckoverflow 中找到了一些非常相似的帖子,但我仍然找不到解决方案。

我知道可能有替代模块来处理这个问题,但我在这里的目的是了解它为什么会失败。

非常感谢提前和最好的问候,

这是我的代码:

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document
xml = xml.dom.minidom.parse("movies.xml")

# collection Node
collection_node = xml.firstChild

# movie Nodes
movie_nodes = collection_node.childNodes

for m in movie_nodes:

    if len(m.childNodes) > 0:
        print '\nMovie:', m.getAttribute('title')

        for tag in m.childNodes:
            print tag.tagName  # AttributeError: Text instance has no attribute 'tagName'
            for text in tag.childNodes:
                print text.data

这里是 XML:

<collection shelf="New Arrivals">
<movie title="Enemy Behind">
   <type>War, Thriller</type>
   <format>DVD</format>
   <year>2003</year>
   <rating>PG</rating>
   <stars>10</stars>
   <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific fiction</description>
</movie>
</collection>

类似帖子:

使用 minidom 获取节点名称

Python 的 Element.tagName 不起作用

4

2 回答 2

6

该错误是由于元素节点之间的新行被认为是TEXT_NODE类型的不同节点(请参阅Node.nodeType),并且TEXT_NODE没有tagName属性。

您可以添加节点类型检查以避免tagName从文本节点打印:

if tag.nodeType != tag.TEXT_NODE:
    print tag.tagName 
于 2015-03-19T12:53:11.073 回答
0

这是用户上面提出的修改后代码的样子:har07

for tag in m.childNodes:
        if tag.nodeType != tag.TEXT_NODE:
        for text in tag.childNodes:
            print tag.tagName, ':', text.data

它现在就像一个魅力。

于 2015-03-19T14:01:58.843 回答