2010-03-11 2 views
2

나는 다음과 같은 구조의 상당히 복잡한 XML 파일을 구문 분석하고 있습니다 :QXmlItem을 QtDomElement 또는 유사하게 변환합니까?

 
<root>
...
...
<item>
<subitem id="1"/>
<text>
text1
</text>
</item>
<item>
<subitem id="2"/>
<text>
text2
</text>
</item>
...
<item>
...
</item>
...
</root>

그것은 꽤 원유의를하지만 당신은 내가 희망을 내 드리프트를 얻을. 저는 주로 "항목"노드에 관심이 있습니다. 그래서 내가 (직접 Qt의 온라인 설명서에서) 다음 코드를 작성 :

QXmlQuery query; 
query.setQuery("//item/"); 

QXmlResultItems result; 
query.evaluateTo(&result); 

QXmlItem item(result.next()); 
while (!item.isNull()) 
{ 
    if (item.isNode()) 
    { 
     // WHAT DO I DO NOW? 
    } 
    item = result.next(); 
} 

지금, QXmlItem이 두 가지 개념 (문자열 등) 리터럴 값 또는 노드를 나타내는 표시 (어떤 항목이다. isNode()가 수행 중입니다.) 불행히도 QXmlItem을 다시 쿼리 할 수있는 것으로 변환하는 방법을 이해할 수 없습니다. 특히 위의 예제에서 "id"속성과 텍스트 요소를 얻고 싶습니다. XQuery 방식을 사용하여이 작업을 수행 할 수 있습니까?

어떤 조언이 필요합니까?

감사합니다.

답변

2

QXmlQuery는 Qt는 문서 중 하나 개 싸구려 조각,하지만 난 당신이 실제로 즉, 원하는 항목을 반환하는 쿼리를 작성하는 것이 말할 것

query.setQuery("//item/subitem | //item/text"); 

W3 스쿨은 Tutorial on XPath있다 (이 교육을받지 못한 추측이다) 그 도움이 될 수도 있습니다

+0

가치가있는 시도, 나는 그것을 시도 할 것이다. – EightyEight

+0

나는 '|' 결과 목록은 쿼리의 순서에 따라 정렬되는 것이 아니라 XML 파일의 순서에 따라 정렬되어야합니다. 쿼리를 결합하여 결과를 영구적 인 순서로 얻는 다른 방법이 있습니까? –

4

QXmlItem을 사용하여 쿼리 포커스를 수정할 수 있습니다. 예를 들어 :

QXmlItem item(result.next()); 
while (!item.isNull()) 
{ 
    if (item.isNode()) 
    { 
    query.setFocus(item); 
    query.setQuery("./text/string()"); 
    QString text; 
    query.evaluateTo(&text); 
    } 
    item = result.next(); 
} 

<item><text> 값을 검색합니다.

+0

'item = result.next();'가 없습니다. 끝에서부터 evaluateTo는 if의 마지막 줄에 'text'주소가 필요합니다. – Swoogan

관련 문제