невозможно получить имя и значение атрибута при разборе xml - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть не пустой 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 Ответ

1 голос
/ 17 апреля 2019
Методы

name() и value() возвращают const char_t*.

char_t - это typedef для Pugi, управляемый макросом PUGIXML_WCHAR_MODE.

То, что я думаю, произошло, вы определили PUGIXML_WCHAR_MODE, char_t становится wchar_t, однако std::cout не является Unicode. Если это так, попробуйте вместо этого использовать вывод Unicode, например:

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