如何使用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
命名空间Help
和Text
元素,并希望忽略任何Text
和Help
元素文档可能是在其他一些命名空间,那么你可以使用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']");
当我从xml文件中删除xmlns =“http://www.example.org/HelpFileStructure”。它正在工作。我得到了错误“无法找到字符串常量运算符”操作符“帮助”与'const char [39]','long long unsigned int'arguments“按照上述程序 – user3214224
评论此行应用程序没有崩溃,但我,没有得到字符串值Element * first_element =(Element *)result.at(0); – user3214224
查看已更新的答案。现在我在'.find()'后面看到,问题中编写的代码期望从节点集中获取第一个节点的文本内容。 – sideshowbarker