2012-01-18 4 views
0

나는 completly XML, libxml 및 xpath에 익숙하다. 따라서 나는 아주 간단한 XML 표현 내가 libxml를 사용하는 다음 코드를 쓴 값 1을 검색 할libxml : xpath을 찾을 수 없습니까?

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

을 구문 분석 원 (이 코드는 목표 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 표현식 "count/active/text()"에 온라인 xpath 평가기를 실행했습니다.

여기서 내가 뭘 잘못하고 있니?

답변

2

문서 설정과 루트 요소가 매우 간단 할 수 있습니다. 먼저 //count/active/text()을 시도하십시오. 작동하는 경우 /count/active/text()을 시도하십시오. 일반적으로 어디서나 일치시키지 않는 한 //을 사용하지 마십시오 (이 특정 문제를 디버깅하는 데는 좋습니다). /count은 루트에 대해 count 요소를 찾아야합니다.

관련 문제