2014-07-16 3 views
0

C# .net의 XMLTextReader를 사용하여 XML을 읽습니다. XML의 구조는 다음과 같습니다.XMLTextReader를 사용하여 XML을 읽는 중 공백 가져 오기

<root attr1="" attr2=""> 
    <element1>some value</element1> 
    <element2>some value</element2> 
</root> 

속성을 reding 한 후, 컨트롤을 element1로 이동합니다. 코드는 다음과 같습니다.

reader.MoveToElement() 
if(reader.ReadToDecedent("element1")) 
{ 
    string val= reader.ReadInnerXML(); 
} 

이제 독자는 공백을 표시합니다. 다시 element1로 이동하고 거기에서부터 ReadToDecendent를 사용하여 element2로 이동하려고합니다. 동일한 흐름을 따라야하므로 MoveToContent()를 사용할 수 없습니다.

그래서 독자 내부 텍스트 뒤에 element1로 이동할 수 있습니까?

답변

0

XPathDocument 및 관련 클래스를 사용 해본 적이 있습니까? 그것은 같은과 같습니다

var _xml = "<xml><elements><element1>some text</element1><element2>some more text</element2></elements></xml>"; 
var xPathDoc = new XPathDocument(XmlReader.Create(new StringReader(_xml))); 
var nav = xPathDoc.CreateNavigator(); 
var node = nav.SelectSingleNode("//element1"); // with xpath exp you can pick out specific tags 
var innerText = node.Value; 

을 이제 그냥 element1 대신,이 element2의 태그 이름으로 요소가 있다면 ... 당신은 모든 요소 태그를 통해 반복 할 수

var nodes = nav.Select("//element"); // selects all element tags 
while(nodes.MoveNext()){ 
    //do something 
} 

이를 아마도 XML 문서를 쿼리하는 더 쉬운 방법 일 것입니다. 특정 속성을 가지고 태그를 원한다면 또한, XPath 식은이

을하는 데 도움이 //element[attr1=\"atrribute_value\"]

희망이 될 것입니다