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