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

can't get attribute's name and value while parsing xml

我有一个非空 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

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

我做错了什么?

name()value() 方法 return const char_t*.

char_t 是 Pugi 特定的类型定义,由 PUGIXML_WCHAR_MODE 宏控制。

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

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