2012-09-25 26 views

回答

0

使用XPath很容易。見XPath examples。一旦你獲得的xmlXPathEvalExpression的結果,只要簡單的寫:

xpathObj->nodesetval->nodeNr 

這裏給出XPath syntax。例如//elem,統計所有elem元素。

以及基於xpath1.c例如完整的功能:

int count(xmlDocPtr doc, const char* path) 
{ 
    int count; 
    xmlXPathContextPtr xpathCtx; 
    xmlXPathObjectPtr xpathObj; 

     /* Create xpath evaluation context */ 
    xpathCtx = xmlXPathNewContext(doc); 
    if(xpathCtx == NULL) { 
     fprintf(stderr,"Error: unable to create new XPath context\n"); 
     return(-1); 
    } 

    /* Evaluate xpath expression */ 
    xpathObj = xmlXPathEvalExpression(path, xpathCtx); 
    if(xpathObj == NULL) { 
     fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", path); 
     xmlXPathFreeContext(xpathCtx); 
     return(-1); 
    } 

    count = xpathObj->nodesetval->nodeNr; 
    printf("count of %s: %d\n", path, count); 

    xmlXPathFreeObject(xpathObj); 
    xmlXPathFreeContext(xpathCtx); 

    return count; 
} 
+1

不是xpathing爲'// tagName'和計數,你可以的XPath'計數(//標籤名)'和檢查obj- > floatval。我不知道是否需要優化步驟,不要在運行時保留完整的匹配列表。 –

相關問題