1

libxml2を使って完全なxmlで同名のタグを数えたいです。libxml2 にカウントを直接返す組み込み関数があるかどうかを提案してください。

4

1 に答える 1

0

XPathを使用するのは簡単です。XPathの例を参照してください。xmlXPathEvalExpressionの結果を取得したら、次のように記述します。

xpathObj->nodesetval->nodeNr

与えられたXPath構文は次のとおりです。たとえば、すべての要素//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;
}
于 2012-09-25T07:13:50.417 に答える