2011-12-03 5 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を持ちますツリー – 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

これは、子ノードをTreeノードにシリアライズしません。私はこれを処理する特定のロジックを実装する方法を探していますか? – user989046