Python XML Pull Parser

时间:2012-11-22 14:58:25

标签: python xml xml-parsing xmlpullparser

我正在尝试使用Python解析XML文件。由于XML的大小,我想使用Pull Parser。我找到了this一个。

我的代码以

开头
doc = pulldom.parse("myfile.xml")
for event, node in doc:
    # code here...

我正在使用

if (node.localName == "b"):

获取XML标记名称,它可以正常工作。

我找不到怎么做是从标签之间获取文本。使用node.nodeValue会返回None

我可以使用node.toxml()来获取节点的完整XML,但我只想要标签之间的文本。有没有办法做到这一点,除了使用正则表达式替换从node.toxml()中取出标签?

1 个答案:

答案 0 :(得分:1)

对于包含文字的每个标记,您有两个本地名称为“b”的节点 - START_ELEMENTEND_ELEMENT。通常你应该收到这样的东西:

START_ELEMENT
CHARACTERS
END_ELEMENT

所以你在匹配的start元素之后寻找字符。你可能想尝试这样的事情:

from xml.dom.pulldom import CHARACTERS, START_ELEMENT, parse

doc = parse("myfile.xml")
text_expected = False
for event, node in doc:
    print event, node
    if text_expected:
        text_expected = False
        if event != CHARACTERS:
            # strange .. there should be some
            continue
        print node.data
    else:
        text_expected = (event == START_ELEMENT) and (node.localName == "b")

使用此myfile.xml

<a>
    <b>c1</b>
    <b>c2</b>
</a>

我得到了输出

c1
c2

请注意,您可能需要strip()每个字符串,并且必须忽略所有其他CHARACTERS - 事件。两个元素之间的每个换行符和空格都会生成CHARACTERS - 事件。​​