2010-05-17 4 views
7

Это то, что мне нужно делать: мне нужно прочитать XML отформатированный документ и извлечь из него элементы и их значения, например, в следующем коде:Простой C XML парсер

<user name="Mark"> 
    <param name="Age" value="21"/> 
    <param name="Country" value="NL"/> 
</user> 

мне нужно для извлечения: name = Mark, Age = 21 и Country = NL.

До сегодняшнего дня я делал этот разбор вручную, что является болью.

Теперь мне все равно, является ли файл «правильным XML» или все такое, меня не интересуют требования DTD или другие стандартные требования XML. Мне просто нужно прочитать и проанализировать значения.

Кто-нибудь знает (кроме lib eXpat) lib, чтобы сделать это или код для этого? Спасибо!

Джесс

EDIT:

Да, я забыл упомянуть платформу: Windows и Linux. В простом C, а не C++

+2

При запросе библиотек вы можете упомянуть свою платформу, так как библиотеки могут быть специфичными для платформы. – WhirlWind

+0

Проверьте vtd-xml, это намного проще в использовании, чем DOM и SAX –

ответ

7
+0

спасибо, я уже проверил это и 1) мне потребовалось навсегда понять, что они хотели от меня (чтобы заставить его работать) и 2) он жалуется, что у меня нет DTD и что мой файл не отформатирован должным образом. так что это не хорошее решение. – Jessica

+0

Я думал о чем-то еще по строкам http://www.codeguru.com/cpp/data/data-misc/xml/article.php/c4549 – Jessica

+0

Он не должен требовать DTD, но он требует, чтобы XML хорошо сформирован, т. Е. Совпадают теги начала и конца и что не существует недопустимых символов и что существует один и только корневой элемент.Если ваш вход плохо сформирован, возможно, вы должны его исправить. Если вы не требуете, чтобы ваш ввод был хорошо сформированным XML, а только что-то xml-ish, тогда вы можете легко написать свой собственный синтаксический анализатор: просто найдите символы «<" & ">», чтобы разбить его на куски, а затем проанализировать каждую часть. Большая сложность анализатора XML заключается в том, что он должен анализировать любой обобщенный XML в конкретной внутренней модели. –

1

Если C++ в порядке, то вы можете попробовать TinyXML. Я использую его в течение нескольких лет, и он работает хорошо.

+0

спасибо, но это просто C – Jessica

+0

Справедливо ... –

4

Expat анализатор является лучшим я столкнулся - я использую его в моем C++ код в предпочтении к различным C++ парсеры - но написано в C. Очень проста в использовании и встраивается в ваше приложение. Так что я не понимаю, почему в вашем вопросе вы говорите:

(кроме Lib Expat)

у вас есть что-то против него?

+0

Я действительно, я бы выбрал expat с учетом данных требований. Единственная причина не использовать его в этом случае, о котором я могу думать, это если плакат не понимает создание структур данных из событий SAX и, следовательно, нуждается в DOM? –

+0

Нет, у меня нет ничего против, на самом деле я использую его в другом проекте, однако он большой, и для чего мне нужно сложнее, чем то, что мне нужно. поэтому, поскольку я очень четко указал на свой вопрос, у меня не будет экспата в качестве решения – Jessica

+0

@Jessica У вас должно быть собственное определение слова «большой» - Expat - это как маленький XML-парсер, так как вы собираетесь получить. В частности, он меньше, чем Mini-XML. – 2010-05-20 19:14:48

4

Как насчет Mini-XML? Это легкий, работает с GCC, является ANSI-C совместимый ...

http://www.minixml.org/index.php

Согласно документации, для поиска конкретных узлов будет столь же просто, как:

/* Find the first "a" element */ 
    node = mxmlFindElement(tree, tree, "a", 
          NULL, NULL, 
          MXML_DESCEND); 

После того, как вы получите узел, вы можете манипулировать им в соответствии с вашими требованиями.

+0

спасибо, я уже разместил это (см. Мой собственный ответ на вопрос) – Jessica

Смежные вопросы