[英]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.