0

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

我的代码以

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()吗?

4

1 回答 1

1

START_ELEMENT对于每个带有文本的标签 - a和 an ,您有两个本地名称为“b”的节点END_ELEMENT。通常你应该收到这样的东西:

START_ELEMENT
CHARACTERS
END_ELEMENT

因此,您正在寻找匹配的起始元素之后的字符。您可能想尝试这样的事情:

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- 事件。

于 2012-11-22T15:23:59.887 回答