Разбор XML-данных в определенные пользователем объекты, SAX или DOM - PullRequest
0 голосов
/ 14 ноября 2011

Я хочу создать простую функцию следующим образом:

vector <User> convertXMLDataToUserList (string xmlData) { …. }

Допустим, что xmlData выглядит следующим образом:

<users>
    <user>
        <firstname>ABC</firstname>
        <lastname>DEF</lastname>
        <!-- …… other attributes -->
    </user>
    <user>
        <firstname>ABC</firstname>
        <lastname>DEF</lastname>
        <!-- …… other attributes -->
    </user>
    <!-- …… More users -->
</users>

Мне нужно проанализировать эти xmlData в коллекцию объектов User. Я хочу использовать библиотеку QtXML, чтобы справиться с этим. Какой подход синтаксического анализа XML лучше для этого, DOM или SAX, и почему?

Конечно, содержимое данных xml не будет ограничено пользовательскими атрибутами, как упомянуто выше, но может содержать и другие элементы. Любые примеры / учебные ссылки при разборе XML-данных на определенные пользователем объекты будут действительно полезны (с использованием библиотеки QtXML).

1 Ответ

2 голосов
/ 09 ноября 2012

прочитайте это сначала и выберите то, что вы хотите использовать соответственно

Синтаксический анализ XML Вторник, 6 ноября 2012 г. · Опубликовано в проекте android, парсинг dom, парсинг кода dom, парсинг, парсинг ответов, синтаксический анализ саксофона, синтаксический анализ саксофона, исходный код, код веб-службы, парсинг веб-сервиса, парсинг xml, xml, парсинг xmlpull

JAXP:

JAXP обозначает Java API для обработки XML. Это спецификация от w3c. JAXP - это API от SUN.

используя API JAXP, мы можем обработать XML-документ за два mthods. DOM: Сохраняет весь XML-документ в памяти перед обработкой. Он занимает больше памяти. Траверс в любом направлении. Древовидная структура данных

Шаги для работы с DOM:

  1. Создать документBuilderFactory

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ();

  2. Создание DocumentBuilder

    DocumentBuilder builder = factory. newDocumentBuilder ();

    1. получить входной поток ClassLoader cls = DomReader.class.getClassLoader (); InputStream is = cls.getResourceAsStream ("XML-файл"); 4. проанализировать xml-файл и получить объект Document, вызвав метод parse на объекте DocumentBuilder. Document document = builder.parse (есть); 5. Пройдите через дерево объектов, используя объект документа. САКС: Простой XML-разбор. Он анализирует узел за узлом Обход сверху вниз Низкое использование памяти Задняя навигация невозможна с sax.

    // реализация необходимых обработчиков открытый класс SaxParse extends DefaultHandler {} // новый экземпляр saxParserFactory SAXParserFactory factory = SAXParserFactory.newInstance (); // НОВАЯ ИНСТАНЦИЯ SAX PARSER SAXParser saxparser = factory.newSAXParser (); // Разбор xml документа SAXParser.parse (новый файл (файл для анализа), новый SAXXMLParserImpl ());

...