使用提升将命名空间添加到 XML



我正在尝试使用boost生成xml。到目前为止一切顺利,但是生成的xml需要有一个命名空间。

所以与其说<name>"Harry"</name>,不如说<ns1:name>"Harry"</ns1:name>

有没有办法使用 boost 将命名空间添加到 XML,而无需手动将"ns1"添加到每一行?

有没有办法使用 boost 将命名空间添加到 XML,而无需手动将"ns1"添加到每一行?

假设你使用rapidxml,不,你不能。但是,您可以扩展 rapidxml 以支持这一点,或者获取支持此功能的解析器的副本(参见 sehe 的答案)。

甚至还有一个已经支持此功能的 rapidxml 分支(您只需要替换它)。或者,您可以通过手动添加字符串来添加命名空间。

Boost 没有 XML 库,所以你不能。

建议从这里选择你的XML库:我应该在C++中使用什么XML解析器?

我个人最喜欢的是PugiXMLUpdate Pugi不支持命名空间(eek):

不支持命名空间节点(影响命名空间::轴)。

但是,要回答这部分问题:

有没有办法使用 boost 将命名空间添加到 XML,而无需手动将"ns1"添加到每一行?

逻辑上讲,您可以使用(可疑的)功能默认命名空间来实现:

<?xml version="1.0"?>
library xmlns="http://eric.van-der-vlist.com/ns/library">
...
</library>

即使没有前缀,所有内容都将从该命名空间逻辑上被视为。

现在,boost 没有记录如何做到这一点,但你可以使用它:

添加 xml 样式表处理指令以提高property_tree

所以,我设法得到了我想要的结果。这是我所做的:

我最外层的元素称为"文档":

ptree& documentnode = pt.add("namespace1:Document", "");

然后为每个命名空间的元素添加标签:

pt.add("Document.<xmlattr>.xmlns:namespace1", "value");

然后在每个元素前面,我必须添加"namespace1":

documentnode.add("namespace1:name", "Harry");

输出:

<namespace1:Document xmlns:namespace1=value>
    <namespace1:name>Harry</namespace1:name>
</namespace1:Document>

可能不是最好的解决方案,但它适合我的需求。

相关内容

  • 没有找到相关文章

最新更新