1
libxml2를 사용하여 전체 XML에서 동일한 이름의 태그를 계산하고 싶습니다. 직접 count를 반환하는 libxml2에 inbuilt 함수가 있는지 제안하십시오.은 libxml2를 사용하여 XML에서 같은 이름의 태그를 계산합니다.
libxml2를 사용하여 전체 XML에서 동일한 이름의 태그를 계산하고 싶습니다. 직접 count를 반환하는 libxml2에 inbuilt 함수가 있는지 제안하십시오.은 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;
}
오히려 // tagName' 및 계산 '에 대한 xpathing보다, 당신은 (// 태그 이름)'수'에 대한 XPath와를 OBJ 확인할 수 있습니다 > floatval. 실행하는 동안 전체 일치 목록을 유지하지 않는 최적화 단계를 수행할지 여부는 알 수 없습니다. –