使用Boost为XML添加命名空间

10 浏览
0 Comments

使用Boost为XML添加命名空间

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

所以,不是"Harry",而是"Harry"

有没有办法在使用boost生成xml时自动为每一行添加命名空间,而不是手动添加"ns1"?

0
0 Comments

问题的出现的原因是因为Boost没有提供XML库,因此无法直接使用Boost来添加XML的命名空间。推荐从这里选择一个XML库来使用。然而,PugiXML不支持命名空间。然而,根据问题的另一部分,可以通过使用默认命名空间的特性来逻辑地添加命名空间。Boost没有文档说明如何实现这一点,但可以通过一些解决方法来实现。其中一种方法是使用Boost Property Tree库,并添加一个解决方案。尽管如此,还是建议使用其他的XML解析器来实现这个目标。

0
0 Comments

问题的原因是希望在使用boost的情况下,能够在XML中自动添加命名空间,而不需要手动在每一行中添加"ns1"。然而,使用rapidxml时不支持自动添加命名空间。但是可以通过扩展rapidxml来实现,或者可以获取支持自动添加命名空间的解析器的副本。甚至已经有一个rapidxml的分支支持自动添加命名空间(只需替换即可)。另外,也可以通过手动添加字符串的方式来添加命名空间。对此,有人指出PugiXML甚至不能正确地支持XML命名空间。但是,Boost Property Tree可能仍然可以提供帮助。

0
0 Comments

问题的出现原因:

在XML中添加命名空间是一种常见的需求,但在使用boost库时,可能会遇到一些问题。在上述内容中,作者尝试通过手动添加命名空间来解决问题,但这并不是最好的解决方法,因为需要手动添加命名空间前缀并且代码比较繁琐。

解决方法:

作者通过使用boost库中的ptree类来解决问题。首先,作者创建了一个名为“Document”的最外层元素,并为每个命名空间添加了标签。然后,在每个元素的前面添加了相应的命名空间前缀。最后,通过输出生成了所需的XML结果。

以下是作者的具体操作:

ptree& documentnode = pt.add("namespace1:Document", "");
pt.add("Document..xmlns:namespace1", "value");
documentnode.add("namespace1:name", "Harry");

最终输出的XML结果如下:


    Harry

尽管这种方法可以达到预期的效果,但作者提到这可能不是最佳解决方案,只是满足了作者的需求。

0