使用 tinyxml2(或其他 C++ XML 库)查找 XML 元素 'start' 和 'end'
Find XML element 'start' and 'end' using tinyxml2 (or other C++ XML library)
我正在尝试遍历 XML 文档的元素,并在 'start' 元素和 'end' 元素上触发事件。
这在使用 Python 的 lxml 模块时非常简单,关于这个甚至还有另一个问题:
Using Python's xml.etree to find element start and end character offsets
#!/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,因为它是 'tiny',但我愿意接受其他 C++ XML 库,如果它们可以实现这一目标(更容易)。
如果有更好的方法在 'end tags' 上触发事件,我也愿意接受。
我正在尝试遍历 XML 文档的元素,并在 'start' 元素和 'end' 元素上触发事件。
这在使用 Python 的 lxml 模块时非常简单,关于这个甚至还有另一个问题:
Using Python's xml.etree to find element start and end character offsets
#!/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,因为它是 'tiny',但我愿意接受其他 C++ XML 库,如果它们可以实现这一目标(更容易)。
如果有更好的方法在 'end tags' 上触发事件,我也愿意接受。