2011-12-03 2 views
0

트리 구조로 만들려는 다음 XML 데이터가 있습니까?트리를 XML로 디스터 리어 처리

<DATA> 
    <NODES> 
    <NODE> 
     <ID>1</ID> 
     <CONTENT>Foo</CONTENT> 
     <ChildrenIds> 
      <Child>2</Child> 
      <Child>3</Child> 
     </ChildrenIds> 
     <Level>1</Level> 
    </NODE> 
    <NODE> 
     <ID>2</ID> 
     <CONTENT>Foo</CONTENT> 
     <ChildrenIds> 
      <Child>4</Child>    
     </ChildrenIds> 
    </NODE> 
    <NODE> 
     <ID>3</ID> 
     <CONTENT>oo</CONTENT> 
     <ChildrenIds> 
     <Child>5</Child> 
     </ChildrenIds> 
    </NODE> 
    <NODE> 
     <ID>4</ID> 
     <CONTENT>Doo</CONTENT> 
     <ChildrenIds/> 
    </NODE> 
    <NODE> 
     <ID>5</ID> 
     <CONTENT>Koo</CONTENT> 
     <ChildrenIds/> 
    </NODE> 
    </NODES> 
</DATA> 

LINQ를 사용하여 이것을 트리 구조로 구문 분석하는 가장 좋은 방법은 무엇입니까?

내가 먼저 예를 들면 다음과 같이 트리 객체로 시작해야 겠지 :

public class Tree 
{ 
    public Tree() 
    { 
     ChildrenNodes = new List<TreeStructure>(); 
    } 

    public List<Tree> ChildrenNodes { get; set; } 
    public int Id { get; set; } 
    public string Content {get; set;} 
} 
+0

실제 질문은 무엇을 선택? – Murph

+0

그리고 ChildrenNodes는 어떻습니까? Id와 Content를 가진 Tree 타입과 서브 클래스의리스트 중 하나일까요? 귀하의 클래스와 XML 트리 구조가 다른 것 같습니다. – Shymep

+0

ChildrenNodes는 ChildrenIds에서 참조 된 노드를 포함해야합니다. 위의 XML에서 Id = 1 인 트리가 있어야하며이 트리에는 Id = 2 및 Id = 3 인 ChildrenNodes가 있고 Id = 2 인 자식에는 Tree = 4 등의 ChildrenNodes가 있습니다. tree – user989046

답변

0
usign system.runtime.serialization 

[datacontract] 
public class Tree 
{ 
    public Tree() 
    { 
     ChildrenNodes = new List<TreeStructure>(); 
    } 
    [datamember] 
    public List<Tree> ChildrenNodes { get; set; } 
    [datamember] 
    public int Id { get; set; } 
    [datamember] 
    public string Content {get; set;} 
} 

void serialize(Tree tree,string filename) 
{ 
datacontractserializer serializer = new datacontracetserializer (typeof(Tree)); 
system.xml.xmltextwriter writer = new xmltextwriter(filename,Encoding.UTF32); 
serializer.WriteObject(writer,tree); 
writer.close(); 
} 

void deserialize(ref Tree tree,string filename) 
{ 
    xmltextreader reader = new xmltextreader*new streamreader(filename, Encoding.UTF32)); 
DataContracetSerializer deser = new datacontracetserializer(typeof(Tree)); 
trr = (Tree)deserializer.readObject(reader); 
reader.close() 
} 

인코딩

+0

두려움이 없으면 ChildrenIds가 트리 노드로 serialize되지 않습니다. 이 특정 논리를 구현하는 방법을 찾고 있어요? – user989046

관련 문제