2016-10-16 6 views
0

C# 콘솔 응용 프로그램에서 XElement의 끝 노드를 가져 오려고합니다.XElement의 EndElement 노드 가져 오기

말은 예를 들어 내 XML의 내용은 다음과 같습니다

<Object> 
    <Item>Word</Item> 
    <Value>10</Value> 
</Object> 

가 어떻게 노드로 </Object>를 가져올 수 있습니까?

element.DescendantNodesAndSelf()을 반복 할 때까지는 여전히 고립 된 </Object> 노드가 표시되지 않습니다.

static void Main(string[] args) 
{ 
    const string xmlString = "<Object><Item>Word</Item><Value>10</Value></Object>"; 
    var element = XElement.Parse(xmlString); 
    foreach (var node in element.DescendantNodesAndSelf()) 
    { 
     Console.WriteLine($"{node}"); 
    } 
    Console.ReadLine(); 
} 
+1

나는 어쩌면 착각하지만, AFAIK, 요소 태그의 끝이없는 XML의 노드 XML 개체 모델에 LINQ에서 그것의, 따라서 어떤 표현으로 간주. 그러나, 왜 이것을 필요로합니까? 달성하고자하는 것은 무엇입니까? – PetSerAl

+0

@PetSerAl "XmlNodeType.EndElement"가 있습니다. 찾고있는 NodeType인지 궁금합니다. XML 컨텐트에 사용자 지정 들여 쓰기를 수행하려면 해당 노드를 확보해야합니다. – AmatuerDev

+0

'XmlNodeType.EndElement'는'XMLReader'가 XML 스트림에서 닫는 태그를 나타내지 만 XML DOM도 LINQ to XML도 메모리 내 객체 모델에서이를 사용하지 않음을 알 수 있습니다. – PetSerAl

답변

1

일반적으로 다음을 수행합니다. ReadFrom은 끝 요소를지나 읽습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      const string xmlString = "<Object><Item>Word</Item><Value>10</Value></Object>"; 
      StringReader sReader = new StringReader(xmlString); 
      XmlReader xReader = XmlReader.Create(sReader); 
      while (!xReader.EOF) 
      { 
       if (xReader.Name != "Object") 
       { 
        xReader.ReadToFollowing("Object"); 
       } 
       if (!xReader.EOF) 
       { 
        XElement _object = (XElement)XElement.ReadFrom(xReader); 
       } 
      } 


     } 
    } 
} 
+0

고맙지 만 XElement는 다른 XDocument의 일부이고 XElement에 대한 모든 변경 내용은 XDocument에 반영되어야하므로 XElement를 XmlReader로 전환하지 않고 그대로 유지해야합니다. – AmatuerDev