2012-01-18 42 views
0

私はXML、libxml、およびxpathを完全に新しくしています。そのため、私は非常に単純なXML式Iは、私はのlibxmlを使用して、次のコードを書いた値1を取得したいlibxml:xpathが見つかりません?

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

を解析したかった(このコードはObjective 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要素を見つけます。

関連する問題