我使用RapidXML解析XML文件和读取节点内容但我不想读取节点内的值,我需要读取特定XML节点的内容"作为XML&# 34;不是解析的值。
示例:
<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文件(FileToRead);
stringstream buffer;缓冲区&lt;&lt; file.rdbuf();
但问题是用户需要维护很多XML文件,我只想使用一个xml文件。
答案 0 :(得分:1)
我认为&#34;很多XML文件&#34;是一种更好的方法,所以你有一个所有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;
}
答案 1 :(得分:0)
我对rapidxml不熟悉,但我用tinyxml2做了这个。诀窍是读出node1然后创建一个新的XMLDoc(在这里使用tinyxml2术语),其中包含node1内的所有内容。从那里,您可以使用他们的XMLPrinter类将新的XMLDoc(包含node1中的所有内容)转换为字符串。
tinyxml2是免费下载的。