Найти XML-элементы 'start' и 'end' с помощью tinyxml2 (или другой библиотеки C++ XML)
Я пытаюсь перебрать элементы XML-документа и запустить события для элементов "start" и "end".
Это довольно просто при использовании модуля 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
Я хотел бы сделать то же самое, используя библиотеку C++ XML для tinyxml2, но мне пока не повезло с этим [особенно найти закрывающие теги].
Я предпочитаю tinyxml2, поскольку он "крошечный", но я открыт для других библиотек C++ XML, если они могут достичь этой цели (более легко).
Если есть лучший способ инициировать события в "конечных тегах", я также открыт для этого.
1 ответ
tinyXml2 предлагает очень простую (и очень быструю) реализацию для синтаксического анализа и навигации внутри структуры xml. RapidXML, вероятно, быстрее, но имеет такое же базовое поведение.
Я предлагаю, если это обязательно обязательное событие перехвата (начало и конец), используйте Xerces, потому что SAXParser позволяет перехватывать, когда анализатор находится внутри элемента xml и когда он также выходит из элемента. Большим неудобством, по моему скромному мнению, является компиляция под MSVC, она чертовски утомительна, потому что вы должны скомпилировать Apache Commons в C++, но в среде gcc я думаю, что сравнение тривиально. Удачи!