не удалось получить значения элементов XML в pugixml с помощью node.value ()

У меня есть простой шаблон XML в моем исходном коде на С ++. В приведенном ниже блоке кода мне нужно получить значения для <scannerID> и <subscannerID>. оба элемента являются дочерними элементами корня документа pugixml.

xml_document doc;
xml_parse_result r;
std::string sXml = "<inArgs><scannerID>1</scannerID><subScannerID>2</subScannerID></inArgs>";


r = doc.load_buffer(sXml.c_str(), sXml.length());
if (!r) {
    return false;
}


xml_node root = doc.child("inArgs");

if (!root) {
    return false;
}

std::cout << "root = " << root.name() << std::endl;

xml_node scanner_node = root.child("scannerID");
if (scanner_node) {
    std::cout << "scannerID = " << scanner_node.name() << std::endl;
    std::cout << "scannerID = " << scanner_node.value() << std::endl;
}

xml_node sub_scanner_node = root.child("subscannerID");
if (scanner_node) {
    std::cout << "sub_scanner_node = " << sub_scanner_node.name() << std::endl;
    std::cout << "sub_scanner_node = " << sub_scanner_node.value() << std::endl;
}

эта часть кода дает результат, как показано ниже. Я могу правильно получить имена узлов, но не смог получить значения.

Вывод: значения - пустые строки.

root = inArgs
scannerID = scannerID
scannerID = 
subscannerID = subscannerID
subscannerID = 

Отредактировано, чтобы добавить изменение для подхода в ответе

node = root.child("scannerID");
if (!node) {
    return false;
}

std::cout << "nodeName = %s" << node.name() << std::endl;
std::cout << "text value: " << node.child_value() << std::endl;

но результат тот же. Я увидел кое-что другое, читая документы в


person Dig The Code    schedule 07.08.2014    source источник


Ответы (1)


Данные находятся в дочернем элементе pcdata вашего element_nodes.

Попробуйте scanner_node.child_value()

см. Получение данных узла раздел для дополнительных примеров и объяснений.

см. node_element

см. node_pcdata

person randooom    schedule 07.08.2014
comment
Спасибо за помощь в этом. Я сослался на вышеуказанные документы и внес некоторые изменения (чтобы добавить node.child_value()), но все равно получаю пустую строку. тем временем я видел вызов нового класса xml_text и некоторые методы-члены, но я не могу использовать его из-за ошибок (не могу разрешить имя члена xml_text) - person Dig The Code; 07.08.2014
comment
pastebin.com/BAM9qzY9 Я скомпилировал вышеуказанное, и результат верен. Что-нибудь еще происходит? - person randooom; 07.08.2014
comment
О, это значит, что у меня что-то не так. Я попробую еще 1 раз. Спасибо - person Dig The Code; 07.08.2014
comment
Перемещено в Github (ссылки в исходном сообщении недействительны). - person starturtle; 15.07.2016