1
我想使用libxml2在完整的xml中對具有相同名稱的標記進行計數。請建議libxml2中是否有任何內置函數直接返回計數。使用libxml2在XML中統計具有相同名稱的標記
我想使用libxml2在完整的xml中對具有相同名稱的標記進行計數。請建議libxml2中是否有任何內置函數直接返回計數。使用libxml2在XML中統計具有相同名稱的標記
使用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;
}
不是xpathing爲'// tagName'和計數,你可以的XPath'計數(//標籤名)'和檢查obj- > floatval。我不知道是否需要優化步驟,不要在運行時保留完整的匹配列表。 –