Найти 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 я думаю, что сравнение тривиально. Удачи!

Другие вопросы по тегам