如何使用libxml2使用xpath从C ++中的xml文件中检索节点和特定元素字符串?

时间:2016-11-25 06:18:19

标签: c++ xml xpath domparser

如何使用libxml在c ++中检索文本值?

这是XML:

<?xml version="1.0" encoding="UTF-8"?>
<Help xmlns="http://www.example.org/HelpFileStructure" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/HelpFileStructure HelpFileStructure.xsd ">
  <Text>dfgdfg</Text>
</Help>

代码:

void Help::HelpName()
{
    string Help_text;
    parser.parse_file(XmlFileName);
    Node* root = parser.get_document()->get_root_node();
    NodeSet result = root->find("/Help/Text");
    Element *first_element = (Element *)result.at(0);
    Help_text = first_element->get_child_text()->get_content();
}

1 个答案:

答案 0 :(得分:0)

使用此:

NodeSet result = root->find("//*[local-name()='Help']/*[local-name()='Text']");

获取一个节点集,其中每个节点都是一个名为Text的元素,无论该元素在哪个名称空间中,它都是名为Help的任何元素的子元素,无论它在哪个名称空间中。

如果您只想在Help命名空间中使用Texthttp://www.example.org/HelpFileStructure元素,并且想要忽略文档可能包含的任何TextHelp元素在某些其他命名空间中,您可以使用namespace-uri()函数,如下所示:

NodeSet result = root->find("//*[local-name()='Help' and namespace-uri()='http://www.example.org/HelpFileStructure']/*[local-name()='Text' and namespace-uri()='http://www.example.org/HelpFileStructure']");