简而言之,XPATH之于
xml,好比SQL之于关系数据库。要在一个复杂的xml文档中查找所需的信息,XPATH简直是必不可少的工具。XPATH语法简单易学,并且有一个很好的官方教程,见http://www.zvon.org/xxl/XPathTutorial/Output_chi/introduction.html。这个站点的XML各种教程齐全,并且有包括中文在内的各国语言版本,真是让我喜欢到非常!
使用XPATH之前,必须首先熟悉几个数据类型和函数,它们是使用XPATH的前提。在libxml2中使用Xpath是非常简单的,其流程如下:
l 定义一个XPATH上下文指针xmlXPathContextPtr context,并且使用xmlXPathNewContext函数来初始化这个指针;
l 定义一个XPATH对象指针xmlXPathObjectPtr result,并且使用xmlXPathEvalExpression函数来计算Xpath表达式,得到查询结果,将结果存入对象指针中;
l 使用result->nodesetval得到节点集合指针,其中包含了所有符合Xpath查询结果的节点;
l 使用xmlXPathFreeContext释放上下文指针;
l 使用xmlXPathFreeObject释放Xpath对象指针;
具体的使用方法可以看XpathForXmlFile.cpp的这一段代码,其功能是查找符合某个Xpath语句的对象指针:
一个完整的使用Xpath的例子在代码XpathForXmlFile.cpp中,它查找一个xml文件中符合"/root/node2[@attribute='yes']"语句的结果,并且将找到的节点的属性和内容打印出来。编译链接命令如下:
nmake TARGET_NAME=XpathForXmlFile
执行方式如下:
XpathForXmlFile.exe CreatedXml.xml
观察结果可以看出找到了一个节点,即root下面node2节点,它的attribute属性值正好等于yes。更多关于Xpath的内容可以参考XPATH官方手册。只有掌握了XPATH,才掌握了使用大型XML文件的方法,否则每寻找一个节点都要从根节点找起,会把人累死。
使用XPATH之前,必须首先熟悉几个数据类型和函数,它们是使用XPATH的前提。在libxml2中使用Xpath是非常简单的,其流程如下:
l 定义一个XPATH上下文指针xmlXPathContextPtr context,并且使用xmlXPathNewContext函数来初始化这个指针;
l 定义一个XPATH对象指针xmlXPathObjectPtr result,并且使用xmlXPathEvalExpression函数来计算Xpath表达式,得到查询结果,将结果存入对象指针中;
l 使用result->nodesetval得到节点集合指针,其中包含了所有符合Xpath查询结果的节点;
l 使用xmlXPathFreeContext释放上下文指针;
l 使用xmlXPathFreeObject释放Xpath对象指针;
具体的使用方法可以看XpathForXmlFile.cpp的这一段代码,其功能是查找符合某个Xpath语句的对象指针:
- xmlXPathObjectPtr getNodeSet(xmlDocPtr doc, const xmlChar *szXpath)
- {
- xmlXPathContextPtr context; //XPATH上下文指针
- xmlXPathObjectPtr result; //XPATH对象指针,用来存储查询结果
- context = xmlXPathNewContext(doc); //创建一个XPath上下文指针
- if (context == NULL)
- {
- printf("context is NULL"n");
- return NULL;
- }
- result = xmlXPathEvalExpression(szXpath, context); //查询XPath表达式,得到一个查询结果
- xmlXPathFreeContext(context); //释放上下文指针
- if (result == NULL)
- {
- printf("xmlXPathEvalExpression return NULL"n");
- return NULL;
- }
- if (xmlXPathNodeSetIsEmpty(result->nodesetval)) //检查查询结果是否为空
- {
- xmlXPathFreeObject(result);
- printf("nodeset is empty"n");
- return NULL;
- }
- return result;
- }
nmake TARGET_NAME=XpathForXmlFile
执行方式如下:
XpathForXmlFile.exe CreatedXml.xml
观察结果可以看出找到了一个节点,即root下面node2节点,它的attribute属性值正好等于yes。更多关于Xpath的内容可以参考XPATH官方手册。只有掌握了XPATH,才掌握了使用大型XML文件的方法,否则每寻找一个节点都要从根节点找起,会把人累死。