解析xml时无法获取属性的名称和值

时间:2019-04-17 15:12:19

标签: c++ xml pugixml

我有一个非空的pugi::xml_node my_node;

如果使用my_node.print(std::cout);打印,则可以清楚地看到该节点的内容还可以。 可以说是

<my_class id="0" name="my class" type="my type">
   <child_1> 45.0 </child_1>
   <child_2> 0.01 </child_2>
   <child_3> 100.0 </child_3>
   <child_4> some_string </child_4>
</my_class>

但是当我尝试迭代它的属性时,我得到了奇怪的输出(看起来像某种地址?)。

for (auto attr : my_node.attributes()){
    std::cout << attr.name() << " : " << attr.value() << std::endl;
}

这是输出:

0x55727e049cd4 : 0x55727e049ce4
0x55727e049d1c : 0x55727e049d34
0x55727e049d8c : 0x55727e049da4

我顺便从文档中拿了这个例子,我也不知道为什么会这样。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

name()value()方法返回const char_t*

char_t是Pugi特定的typedef,由PUGIXML_WCHAR_MODE宏控制。

我认为发生了什么,您已经定义了PUGIXML_WCHAR_MODEchar_t变成了wchar_t,但是std::cout不是Unicode。如果是这种情况,请尝试改用Unicode输出,如下所示:

std::wcout << attr.name() << L" : " << attr.value() << std::endl;