2014-01-13 30 views
2

在libxml中,我嘗試選擇第一個元素來使用xpath驗證條件。如果我理解正確,「xpath [包含(@ id,'art')] [1]」只會給出一個元素,儘管我得到的不止一個元素。我在libxml教程中使用函數getnodeset(請參閱here)。下面是代碼:在libxml中選擇使用xPath驗證一個convolution的第一個元素

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); 
} 

回答

0

相反

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

你想

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

原因與結合優先做。您可能知道,[1][position() = 1]的簡寫。在您嘗試使用的變體中,這意味着「當前節點(div元素)是其父項的第一個子項」。顯然,可能有許多這樣的分部,每個分部都是各自父母的第一個孩子。

當你把括號周圍的表達//div[predicate]和追加[1]到這一點,那麼你問你打算問一個問題:什麼是在節點集由//div[predicate]選擇的第一個節點?

相關問題