无法使用node.value()获取pugixml中的XML元素值

时间:2014-08-07 12:19:21

标签: c++ xml pugixml

我的C ++源代码中有简单的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;

但输出仍然相同。我在阅读

中的文件时看到了不同的东西

1 个答案:

答案 0 :(得分:4)

数据位于element_nodes的pcdata子元素中。

尝试scanner_node.child_value()

有关更多示例和说明,请参阅Getting node data部分。

请参阅node_element

请参阅node_pcdata