libxml:找不到xpath?

时间:2012-01-18 22:25:26

标签: objective-c xml xpath libxml2

我完全不熟悉XML,libxml和xpath。因此,我想解析一个非常简单的XML表达式

<count>
    <active type="integer">1</active>
</count>

我想检索值1.我编写了以下使用libxml的代码(此代码包含目标c代码):

const unsigned char* xPathExp = (const unsigned char*) "count/active/text()";
xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc);
xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression( xPathExp, xpathCtx);
xmlNodeSetPtr nodeSetPtr = xpathObj->nodesetval;
if( nodeSetPtr != 0 ) {
    xmlNode* node = nodeSetPtr->nodeMax > 0 ? nodeSetPtr->nodeTab[0] : 0;
    if( node != 0 ) {
        NSLog(@"Active Projects = %@", [self stringFromCString:node->name] );
    } else {
        NSLog(@"Node for xpath Exp: count/active/text() does not exist.");
    } 
} else
    NSLog(@"nodeSetPtr is null");

xmlFreeDoc(doc);
xmlCleanupParser();

事实证明此代码的输出是

nodeSetPtr is null

这让我很困惑。我在上面的xml上运行了一个在线xpath求值程序,xpath表达式“count / active / text()”返回1.

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

它可能就像您的文档设置和根元素一样简单。首先,尝试//count/active/text()。如果可行,请尝试/count/active/text()。一般情况下,尽量不要使用//,除非你真的想在任何地方匹配(尽管很适合调试这个特殊问题)。 /count应该找到针对根的count元素。