Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 选择在libxml中使用xPath验证条件的第一个元素_C_Xpath_Libxml2 - Fatal编程技术网

C 选择在libxml中使用xPath验证条件的第一个元素

C 选择在libxml中使用xPath验证条件的第一个元素,c,xpath,libxml2,C,Xpath,Libxml2,在libxml中,我尝试选择第一个元素来使用xpath验证条件。如果我理解正确,xpath中的“//div[contains(@id,'art')]][1]”将只给出一个元素,尽管我得到了多个元素。我在libxml教程中使用函数getnodeset(请参阅)。代码如下: xmlXPathObjectPtr result=getnodeset(def,(xmlChar*) "//div[contains(@id,'art')][1]"); // where def is a htmlDocPtr

在libxml中,我尝试选择第一个元素来使用xpath验证条件。如果我理解正确,xpath中的“//div[contains(@id,'art')]][1]”将只给出一个元素,尽管我得到了多个元素。我在libxml教程中使用函数getnodeset(请参阅)。代码如下:

xmlXPathObjectPtr result=getnodeset(def,(xmlChar*) "//div[contains(@id,'art')][1]"); // where def is a htmlDocPtr
xmlNodeSetPtr nodeset;
if(result)
{
nodeset=result->nodesetval;

if(nodeset->nodeNr>1)
    fprintf(stderr,"%i first div with id attribute *art* : %s\n",nodeset->nodeNr,nomDef);
}
而不是

"//div[contains(@id,'art')][1]"
你想要

"(//div[contains(@id,'art')])[1]"
原因与绑定优先级有关。您可能知道,
[1]
[position()=1]
的缩写。在您尝试使用的变体中,这意味着“当当前节点(div元素)是其父节点的第一个子节点时”。显然,可能有许多这样的div,每个div都是各自父母的第一个孩子

当您在表达式
//div[predicate]
周围加上括号并在其后面加上
[1]
时,您要问的问题是:
//div[predicate]
选择的节点集中的第一个节点是什么