我正在尝试使用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()
中取出标签?
答案 0 :(得分:1)
对于包含文字的每个标记,您有两个本地名称为“b”的节点 - START_ELEMENT
和END_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
- 事件。