標籤:

C++解析xml有什麼好用的輪子?

找了很多不支持unicode,msdn略混亂,找了半天沒找到有用的msxml的文檔


https://github.com/fffaraz/awesome-cpp#xml

這裡有個相當全的列表

XML

XML is crap. Really. There are no excuses. XML is nasty to parse
for humans, and it"s a disaster to parse even for computers. There"s
just no reason for that horrible crap to exist. - Linus Torvalds

  • Boost.PropertyTree - A property tree parser/generator that can be used to parse XML/JSON/INI/Info files. [Boost]
  • Expat - An XML parser library written in C. [MIT]
  • Libxml2 - The XML C parser and toolkit of Gnome. [MIT]
  • libxml++ - An XML Parser for C++. [LGPL2]
  • PugiXML - A light-weight, simple and fast XML parser for C++ with XPath support. [MIT]
  • RapidXml - An attempt
    to create the fastest XML parser possible, while retaining useability,
    portability and reasonable W3C compatibility. [Boost]
  • TinyXML - A simple, small, minimal, C++ XML parser that can be easily integrating into other programs. [zlib]
  • TinyXML2 - A simple, small, efficient, C++ XML parser that can be easily integrating into other programs. [zlib]
  • TinyXML++ - A
    completely new interface to TinyXML that uses MANY of the C++ strengths.
    Templates, exceptions, and much better error handling. [MIT]
  • Xerces-C++ - A validating XML parser written in a portable subset of C++. [Apache2]

強烈推薦的是rapidxml


boost中的組件,rapidxml

評論區,龔大說得對


pugixml -

Light-weight, simple and fast XML parser for C++ with XPath support

YY 客戶端用的就是這個


是時候上這張圖了:

來源 xml parsing - What XML parser should I use in C++?


Boost.PropertyTree


Are you using a real XML parser


CMarkup http://www.firstobject.com

我用過API最好用的,堪比Python的ElementTree


Pugixml 我一直用,支持XPath,性能也很好。

而XPath正是RapidXml的弱點。


我只用Pugixml

tiny和lib系都用過,介面都不喜歡

相比而言Pugi介面美得多,性能也強大,何況還有XPath


推薦boost 的property tree

ini

json

xml

三種常用數據格式通吃。

http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree.html


現在是tinyxml2最好,解析性能要好,同時api還要設計的好用,rapidxml性能好,但是不如tinyxml2好用,tinyxml2隻需要包含兩個頭文件,api也設計的很好


tinyxml ?


誰知道C++有哪些sax讀xml的庫,就是載入大文件(幾十G的xml)時能夠事務驅動的讀取


很多的。比如msxml


本人用過libxml, xercesc, tinyxml2, rapidxml

rapidxml性能最好,最適合用作配置存取

最近增加了rapidxml sax解析介面

詳見: https://github.com/halx99/xmldrv3

xmldrv3早期封裝了libxml,xercesc,tinyxml2

統一介面,目前封裝了rapidxml


如果我說Qt會不會被鄙視。


tinyxml2非常好用


libxml2, 很好用.


Tinyxml ,github 上的開源項目


Poco庫中組件 XML

支持靜態庫和動態庫

類似java 的介面調用,簡單易懂


tinyXML

boost也有XML的解析庫


推薦閱讀:

為什麼Python里類中方法self是顯式的,而C++中this是隱式的?
同一段代碼,為什麼有的編譯器能編譯通過,有的不能?
有什麼很好的軟體是用 Qt 編寫的?
沒有Linux cpp後台開發經驗的應屆生如何找到一份Linux cpp後台開發的工作?
如何實現快速將 64 位二進位(存在字元串里)轉換為十進位?

TAG:XML | C |