Rapidxml如何在输出空元素时更改标记格式

时间:2014-09-15 12:18:28

标签: xml xml-parsing rapidxml

我使用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;

2 个答案:

答案 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);
}