2012-01-18 3 views
0

Я совершенно не знаком с XML, libxml и xpath. Поэтому я хотел бы разобрать очень простое выражение XMLlibxml: xpath не найден?

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

Я хочу, чтобы получить значение 1. Я написал следующий код, который использует LibXML (этот код содержит 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(); 

It получается, что выход этого кода равен

nodeSetPtr is null 

Так что меня смущает. Я проверил онлайн-оценщик xpath на xml выше и выражение xpath «count/active/text()» return 1.

Что я здесь делаю неправильно?

ответ

2

Это может быть так же просто, как и настройка вашего документа, и что такое корневой элемент. сначала, попробуйте //count/active/text(). Если это сработает, попробуйте /count/active/text(). В общем, постарайтесь не использовать //, если вы действительно не хотите сопоставлять нигде (отлично подходит для отладки этой конкретной проблемы). /count должен найти элемент count против корня.