libxml: xpath не найден? - PullRequest
       29

libxml: xpath не найден?

0 голосов
/ 19 января 2012

Я совершенно новичок в 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

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

Что я здесь не так делаю?

1 Ответ

2 голосов
/ 19 января 2012

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

...