2010-10-19 4 views
2

В Windows для синтаксического анализа XML можно использовать XML-интерфейс на основе COM, но мне было интересно, есть ли там библиотеки XML C++, которые я могу использовать для этой цели, без необходимости вникать в тонкости COM?Библиотека C++ XML для использования под Windows

ответ

2

Да, конечно.

Если вам не нужно подтверждение, я хотел бы предложить TinyXML++, который также очень прост в использовании:

ticpp::Document doc(pcFilename); 
    doc.LoadFile(); 

    // parse through all elements 
    std::string strName; 
    std::string strValue; 
    ticpp::Iterator<ticpp::Element> child; 
    for(child = child.begin(doc.FirstChildElement()); child != child.end(); child++) 
    { 
      // parse through all the attributes of this fruit 
      ticpp::Iterator<ticpp::Attribute> attribute; 
      for(attribute = attribute.begin(child.Get()); attribute != attribute.end(); attribute++) 
      { 
        attribute->GetName(&strName); 
        attribute->GetValue(&strValue); 
        std::cout << strName << ": " << strValue << std::endl; 
      } 
      std::cout << std::endl; 
    } 

Если вам нужно подтверждение, рассмотреть вопрос об использовании XercesC++.

1

Я использовал XercesC++ в прошлом для хорошего эффекта. Недавно я использовал MSXML, что было болью в сравнении.

2

AFAIK, самая эффективная библиотека анализатора с открытым исходным кодом для C, C#, C++ и Java в настоящее время - VTD-XML. Что касается производительности, он превосходит DOM, SAX и XPath. Я преобразовал библиотеку в Delphi для моего частного проекта, и я обнаружил, что VTD-XML похож на то, что он утверждает. См. VTD-XML Benchmark.

0

Expat XML Parser также является хорошим. Я думаю, вы найдете для него C++ wapper.

0

Простой поиск по Google нашел мне довольно много парсеров XML для C++, кроме Xerces (наиболее часто используемый).

Я не знаю, насколько они хороши. Вот два:

libXML

TinyXML

0

boost.property_tree имеет XML-анализатор (на основе RapidXml).

Это только заголовок и не имеет зависимостей, кроме Boost.

0

Я использовал xerces и expat (обе библиотеки C) изнутри C++. Оба делают свою работу хорошо, но если бы мне пришлось переписать мой код снова, я бы, вероятно, использовал libxml2. Xerces IMO слишком велика и огромна для моих нужд, а expat - слишком низкоуровневая. Я понимаю, что libxml2 является хорошей библиотекой более высокого уровня. (Я использовал привязки python lxml для libxml2, и они работают красиво.).

О, и я использовал tinyxml немного (несколько лет назад), но нашел свою модель DOM слишком медленной для моих нужд.

3

Предлагаю pugixml. Pugixml является Light-weight, simple and fast XML parser for C++ with XPath support

Вот quick start guide, а вот benchmark, обратите внимание, как только AsmXML быстрее, чем pugixml.

+0

pugxml не очень согласованный парсер, vtd-xml is. –

+1

Это может быть правдой. Я немного поглядел на vtd-xml, и я обнаружил, что лицензия GPL и, как ни странно, пространство имен C++ называется * com_ximpleware *. pugixml (обратите внимание на i от имени) небольшой, простой в использовании, хорошо документированный, быстрый и написан на ... C++ (я знаю, что vtd-xml имеет реализацию на C++, но уровень C++ не является тоже самое)! –

+0

Я не знаю (или соглашаюсь) с частью C++ ness, но он работает для вас, это хорошая новость. –

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