簡體   English   中英

使用RapidXML讀取XML節點

[英]Read XML node with RapidXML

我正在使用RapidXML解析XML文件並讀取節點內容,但是我不想讀取節點內部的值,我需要將特定XML節點的內容“作為XML”而不是作為解析值來讀取。

范例:

<node1>
    <a_lot_of_xml>
      < .... >
    </a_lot_of_xml>
</node1>

我需要獲取node1的內容為:

<a_lot_of_xml>
    < .... >
</a_lot_of_xml>

我累了:

我嘗試了一些東西,但我認為它並不是很好,它即將放入node1中,即要讀取的另一個xml文件的路徑,我這樣做是:

<file1ToRead>MyFile.xml</file1ToRead>

然后我的c ++代碼如下:

ifstream file(FileToRead);

串流緩沖區; 緩沖區<< file.rdbuf();

但是問題是用戶將需要維護許多XML文件,而我只想使用一個xml文件。

我認為“很多XML文件”是一種更好的方法,因此您擁有所有xml文件的目錄,可以在需要時讀取xml文件,這對性能有好處。 回到問題所在,可以使用rapidxml :: print函數獲取xml格式。

bool test_analyze_xml(const std::string& xml_path)
{
    try
    {
        rapidxml::file<> f_doc(xml_path.c_str());  
        rapidxml::xml_document<> xml_doc;
        xml_doc.parse<0>(const_cast<char*>(f_doc.data()));
        rapidxml::xml_node<>* node_1 = xml_doc.first_node("node1"); 
        if(node_1 == NULL)
        {
            return false;
        }
        rapidxml::xml_node<>* plain_txt = node_1->first_node("a_lot_of_xml"); 
        if (plain_txt == NULL)
        {
            return false;
        }
        std::string xml_data;
        rapidxml::print(std::back_inserter(xml_data), *plain_txt, rapidxml::print_no_indenting);  //the xml_data is XML format.
    }
    catch (...)
    {
        return false;
    }
    return true;
}

我不熟悉Rapidxml,但是我已經使用tinyxml2做到了。 訣竅是讀出node1,然后創建一個新的XMLDoc(此處使用tinyxml2術語),其中包含node1內部的所有內容。 從那里,您可以使用其XMLPrinter類將新的XMLDoc(在node1中包含所有內容)轉換為字符串。

tinyxml2是免費下載的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM