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

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

问题描述:

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

这里是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(); 
} 

使用此:

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

那得到一个节点集,其中每个节点是一个名为Text的元素,无论该元素的名称空间的名称空间,这是任何元素名为Help的子元素,不管什么名称空间的它在不在。

如果你只想在http://www.example.org/HelpFileStructure命名空间HelpText元素,并希望忽略任何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']"); 
+0

当我从xml文件中删除xmlns =“http://www.example.org/HelpFileStructure”。它正在工作。我得到了错误“无法找到字符串常量运算符”操作符“帮助”与'const char [39]','long long unsigned int'arguments“按照上述程序 – user3214224

+0

评论此行应用程序没有崩溃,但我,没有得到字符串值Element * first_element =(Element *)result.at(0); – user3214224

+0

查看已更新的答案。现在我在'.find()'后面看到,问题中编写的代码期望从节点集中获取第一个节点的文本内容。 – sideshowbarker