2012-01-18 80 views
0

我完全是XML,libxml和xpath的新手。因此,我想分析一個非常簡單的XML表達libxml:找不到xpath?

<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.

我在做什麼錯誤?

回答

2

它可能與您的文檔設置一樣簡單,以及根元素是什麼。首先,嘗試//count/active/text()。如果可行,請嘗試/count/active/text()。一般來說,儘量不要使用//,除非你真的想在任何地方匹配(雖然對於調試這個特定的問題很好)。 /count應該找到根元素的count元素。