91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

C++讀取XML文件數據

C#中讀取xml文件通過添加引用 using System.Xml; 創建 通過XML 文檔操作對象來讀取

現在需要在c++中來讀取xml文件,查閱資料發現比較常用的方法有以下四種:

Qt/TinyXml2/RapidXml/PugiXml

網上的執行效率對比圖:PugiXml最快,所以就著重寫下PugiXml

方法一、Qt

因為網友評論最慢,所以也沒有去測試和實踐

方法二:TinyXML

TinyXML下載地址:https://sourceforge.net/projects/tinyxml/

官方文檔:TinyXML

TinyXML是個解析庫,它由兩個頭文件(.h文件)和四個CPP文件(.cpp文件)構成,用的時候,只要將(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)導入工程就可以用它的東西了。如果需要,可以將它做成自己的DLL來調用。

方法三、RapidXml

RapidXml是一個XML DOM解析工具包,適用于C++的xml解析器。整個解析器包含在rapidxml.hpp、rapidxml_utils.hpp、rapidxml_print.hpp、rapidxml_iterators.hpp這四個頭文件中(前三個較常用),頭文件獲取方式及在線手冊在以下鏈接。

快速XML (sourceforge.net)

方法四:PugiXml

pugixml是一個輕量級的C ++ XML操作庫。

Pugixml包含三個文件pugixml.cpp、 pugixml.hpp 、 pugiconfig.hpp。

pugixml.hpp是主頭文件,要使用pugixml類及其方法必須將它包含到工程中。pugiconfig.hpp是pugixml的配置文件,例如配置是否使用寬字符模式(#define PUGIXML_WCHAR_MODE)pugixml.cpp是源文件,該文件需設置為不使用預編譯頭。

表示樹的c++類型只有三種(xml_document、xml_node、xml_attribute);xml_node上的某些操作僅對某些節點類型有效。它們描述如下。

Xml_document是整個文檔結構的所有者;其功能包含加載/保存文檔等,銷毀它將銷毀整個文檔。xml_document的接口由加載函數、保存函數和xml_node的整個接口組成,該接口允許檢查和/或修改文檔。注意,雖然xml_document是xml_node的子類,但xml_node不是多態類型;繼承只是為了簡化使用。

Xml_node是文檔節點的句柄;它可以指向文檔中的任何節點,包括文檔本身。所有類型的節點都有一個公共接口。注意,xml_node只是實際節點的句柄,而不是節點本身——可以有幾個xml_node句柄指向相同的底層對象。銷毀xml_node句柄不會銷毀該節點,也不會將其從樹中刪除。

xml_node類型有一個特殊值,稱為空節點或空節點。它不對應于任何文檔中的任何節點,因此類似于空指針。但是,所有操作都是在空節點上定義的;通常,這些操作不做任何事情,返回空節點/屬性或空字符串作為其結果。這對于鏈接調用很有用;也就是說,你可以像這樣獲得一個節點的祖父結點:node.parent().parent();如果一個節點是一個空節點或它沒有父節點,第一個父()調用返回null節點;第二個parent()調用也返回null節點,因此您不必檢查錯誤兩次。你可以通過隱式布爾類型轉換來測試句柄是否為空:if (node){…}或if (!node){…}。

xml_attribute是XML屬性的句柄;它具有與xml_node相同的語義,即可以有多個xml_attribute句柄指向相同的底層對象,并且有一個特殊的null屬性值,它將傳播到函數結果。

使用:

<Root>
    <students>
        <student>
            <name>張三</name>
            <sex>男</sex>
        </student>
        <student>
            <name>李四</name>
            <sex>男</sex>
        </student>
        <student>
            <name>王五</name>
            <sex>女</sex>
        </student>
    </students>
</Root>
void Read()

{

    pugi::xml_document doc;

    if (doc.load_file("students.xml",pugi::parse_default,pugi::encoding_utf8))
    {
        pugi::xml_node root_node = doc.child(_T("Root"));
        pugi::xml_node students_node = root_node.child(_T("students "));
        // 分別讀取每個學生信息
        for (pugi::xml_node student_node = students_node.child(_T("student"));
            student _node;
            student _node = student _node.next_sibling(_T("student ")))
        {
            pugi::xml_node name_node = students_node.child(_T("name"));
            printf("name : %s\n",name_node.first_child().value());
            pugi::xml_node sex_node = student_node.child(_T("sex"));
            printf("sex: %s\n",sex_node.first_child().value());
        }
    }
}
 
全部回復(0)
正序查看
倒序查看
現在還沒有回復呢,說說你的想法
主站蜘蛛池模板: 武乡县| 固阳县| 金阳县| 乌兰县| 大足县| 高邑县| 普定县| 福清市| 阿拉善右旗| 贺兰县| 塘沽区| 潮安县| 荔浦县| 抚顺市| 香河县| 阿拉善右旗| 额济纳旗| 张北县| 克东县| 高邑县| 磐石市| 花莲市| 东辽县| 河北省| 南召县| 景洪市| 屏边| 惠安县| 阳信县| 乌拉特中旗| 九台市| 沙坪坝区| 绥江县| 大悟县| 贡嘎县| 黄冈市| 灵台县| 高阳县| 五寨县| 大安市| 宁晋县|