2011-08-17 11 views
0

xmlreader를 사용하여 xml 파일을 구문 분석합니다.xmlreader 건너 뛰기 형제

string path = @"E:\tmp\testxml.xml"; 
using (var reader = XmlReader.Create(path)) 
{ 

    bool isOnNode = reader.ReadToDescendant("resource"); 
    while (isOnNode) 
    { 
     var element = (XElement)XNode.ReadFrom(reader); 

     isOnNode = reader.ReadToNextSibling("resource"); 
    } 
} 

그러나 XMLReader를 같은 나의 방법 모양이 형제 노드 "리소스"를 건너 뜁니다. 또한 Visual Studio에서 xml 파일을 열 때 들여 쓰기를 저장하면 노드가 건너 뛰지 않습니다.

+0

해당 언어 태그에 질문을 태그하십시오. –

+1

XML 파일의 내용도 입력하십시오. – Sven

답변

1

XNode.ReadFrom 메서드는 읽은 하위 트리의 닫는 요소 다음에 판독기를 배치합니다. 파일에 공백이 없으면 다음 <resource> 요소가됩니다. 이 요소는 ReadToNextSibling 호출에 의해 건너 뜁니다.

다음이를 해결해야

string path = @"E:\tmp\testxml.xml"; 
using(var reader = XmlReader.Create(path)) 
{ 

    bool isOnNode = reader.ReadToDescendant("resource"); 
    while(isOnNode) 
    { 
     var element = (XElement)XNode.ReadFrom(reader); 

     if(!reader.IsStartElement("resource")) 
      isOnNode = reader.ReadToNextSibling("resource"); 
    } 
} 

<resource> 요소의 형제 어떠한 비 <resource> 요소가없는 경우에는 문제는 또한 동안 루프 상태 IsStartElement를 사용하여 간단하게 해결할 수있다.

+0

감사합니다. – bobosh