如何使用XPath使用libxml2从C 中的XML文件中检索节点和特定元素字符串

How to retrieve node and particular element string from xml file in C++ using libxml2 by using xpath?

本文关键字:节点 检索 字符串 元素 文件 XML 使用 XPath 何使用 libxml2 中的      更新时间:2023-10-16

如何使用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();
}

使用以下:

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']");