我使用rapidxml库从xml文件中读取/解析内容,对dom的内容进行一些更改,然后再将dom保存到文件中。
当我将xml_document的内容保存到文件时,包含空字符串的元素将保存为<empty_tag/>
,但我希望将它们保存为<empty_tag><empty_tag/>
。我可以用rapidxml改变它吗?
流程如下:
//read the xml content
rapidxml::xml_document<> dom;
std::ifstream i_xmlfile('path');
std::vector<char> xml_content = std::vector<char>(std::istreambuf_iterator<
char>(i_xmlfile), std::istreambuf_iterator<char>());
xml_content.push_back('\0');
dom.parse<0 | rapidxml::parse_no_data_nodes> (&xml_content[0]);
... process nodes here ...
//save the xml content
std::ofstream o_xmlfile;
o_xmlfile.open('path');
o_xmlfile << dom;
答案 0 :(得分:0)
在库代码中进行了更深思熟虑的搜索后,我得出结论,只有在编辑库时才能更改此格式。
因此,为了使其工作,我在方法print_element_node()
的文件rapidxml_print.hpp中更改了一些行(rapidxml版本1.13中的第283行):
// Print childless node tag ending
*out = Ch('/'), ++out;
*out = Ch('>'), ++out;
更改为:
*out = Ch('>'), ++out;
// Print node end
*out = Ch('<'), ++out;
*out = Ch('/'), ++out;
out = copy_chars(node->name(), node->name() + node->name_size(), out);
*out = Ch('>'), ++out;
答案 1 :(得分:0)
我有一个带有补丁实现的叉子,可以显式声明一个自闭标签: https://sourceforge.net/p/tacklelib/3dparty--rapidxml/HEAD/tree/branches/
示例:
for (rapidxml::xml_node<> * node = ...; node; node = node->next_sibling())
{
node->flags(node->flags() & ~rapidxml::node_self_closed_tag);
}