我正在尝试遍历 XML 文档的元素,并在“开始”元素和“结束”元素上触发事件。
这在使用 Python 的 lxml 模块时非常简单,甚至还有另一个关于 SO 的问题:
使用 Python 的 xml.etree 查找元素开始和结束字符偏移量
#!/usr/bin/python
import re, sys
from lxml import etree
from StringIO import StringIO
dtd = etree.DTD (open (sys.argv [1], "r"))
xml = etree.XML (open (sys.argv [2], "r").read ())
result = dtd.validate (xml)
for error in dtd.error_log.filter_from_errors():
print(error.message)
print(error.line)
print(error.column)
if result == True :
for event, elem in etree.iterwalk (xml, events=('start', 'end')) :
if event == 'start' :
print 'starting element:', elem.tag
elif event == 'end' :
print 'ending element:', elem.tag
if elem is not xml :
print elem.tail
我想使用 tinyxml2 C++ XML 库做同样的事情,但到目前为止我还没有运气[特别是找到结束标签]。
我更喜欢 tinyxml2,因为它“很小”,但如果其他 C++ XML 库能够实现这一目标(更容易),我愿意接受。
如果有更好的方法来触发“结束标签”上的事件,我也对此持开放态度。