性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

C++讀取XML文件數(shù)據(jù)

C#中讀取xml文件通過(guò)添加引用 using System.Xml; 創(chuàng)建 通過(guò)XML 文檔操作對(duì)象來(lái)讀取

現(xiàn)在需要在c++中來(lái)讀取xml文件,查閱資料發(fā)現(xiàn)比較常用的方法有以下四種:

Qt/TinyXml2/RapidXml/PugiXml

網(wǎng)上的執(zhí)行效率對(duì)比圖:PugiXml最快,所以就著重寫(xiě)下PugiXml

方法一、Qt

因?yàn)榫W(wǎng)友評(píng)論最慢,所以也沒(méi)有去測(cè)試和實(shí)踐

方法二:TinyXML

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

官方文檔:TinyXML

TinyXML是個(gè)解析庫(kù),它由兩個(gè)頭文件(.h文件)和四個(gè)CPP文件(.cpp文件)構(gòu)成,用的時(shí)候,只要將(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)導(dǎo)入工程就可以用它的東西了。如果需要,可以將它做成自己的DLL來(lái)調(diào)用。

方法三、RapidXml

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

快速XML (sourceforge.net)

方法四:PugiXml

pugixml是一個(gè)輕量級(jí)的C ++ XML操作庫(kù)。

Pugixml包含三個(gè)文件pugixml.cpp、 pugixml.hpp 、 pugiconfig.hpp。

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

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

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

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

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

xml_attribute是XML屬性的句柄;它具有與xml_node相同的語(yǔ)義,即可以有多個(gè)xml_attribute句柄指向相同的底層對(duì)象,并且有一個(gè)特殊的null屬性值,它將傳播到函數(shù)結(jié)果。

使用:

<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 "));
        // 分別讀取每個(gè)學(xué)生信息
        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());
        }
    }
}
 
全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒(méi)有回復(fù)呢,說(shuō)說(shuō)你的想法
發(fā)