【问题标题】:libxml : xpath not found?libxml:未找到 xpath?
【发布时间】:2012-01-18 22:25:26
【问题描述】:

我对 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。

我在这里做错了什么?

【问题讨论】:

    标签: objective-c xml xpath libxml2


    【解决方案1】:

    这可能与您的文档设置和根元素是什么一样简单。首先,尝试//count/active/text()。如果可行,请尝试/count/active/text()。一般来说,尽量不要使用//,除非你真的想在任何地方匹配(虽然非常适合调试这个特殊问题)。 /count 应该在根上找到 count 元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      相关资源
      最近更新 更多