我有一个非空的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
我顺便从文档中拿了这个例子,我也不知道为什么会这样。
我在这里做什么错了?
答案 0 :(得分:1)
name()
和value()
方法返回const char_t*
。
char_t
是Pugi特定的typedef,由PUGIXML_WCHAR_MODE
宏控制。
我认为发生了什么,您已经定义了PUGIXML_WCHAR_MODE
,char_t
变成了wchar_t
,但是std::cout
不是Unicode。如果是这种情况,请尝试改用Unicode输出,如下所示:
std::wcout << attr.name() << L" : " << attr.value() << std::endl;