2014-10-13 7 views
1

저는 새로운 XML을 사용했고 몇 가지 기본 사항에 어려움을 겪고 있습니다.XMLTextReader는 자식을 얻습니다.

내가이 문서를 읽는 XmlTextReader가 있습니다

<node guid="e7071d4d-21b0-48c0-b803-daf202998633" tag="3DMesh" imageindex="1" text="body__6557_0"/> 

<node guid="3bc0240f-cdf4-4e09-94de-a52d7bc0c4be" tag="3DMesh" imageindex="1" text="body__6558_0"/> 

<node guid="59dd7ce9-176c-4a45-a45d-b632b675b6c9" tag="3DMesh" imageindex="1" text="body__6581_0"/> 

<node guid="66166789-3500-46ef-b43b-34919481ad37" tag="3DMesh" imageindex="1" text="body__6582_0"/> 

<node guid="95882524-a9a6-4a50-a3bc-fe7c31ef2e47" tag="3DMesh" imageindex="1" text="Fixed_Support_OD_610_1__1_0"/> 


<node tag="GroupNode" imageindex="3" text="Group"> 

<node guid="295e5a94-3732-4b3d-81f4-b04636eb71c3" tag="3DMesh" imageindex="1" text="a_11_1__9_0"/> 

<node guid="f56472cc-dd46-44c8-997f-113cb959661d" tag="3DMesh" imageindex="1" text="a_12_1__9_0"/> 

</node> 

<node guid="2ebcd33a-f8e7-46ea-b637-2b7e3120a7da" tag="3DMesh" imageindex="1" text="Rod_Hanger_610_1_0"/> 

<node guid="9221b254-fe4c-4c10-b6d2-da21a46eeb56" tag="3DMesh" imageindex="1" text="Rod_Hanger_610_2_0"/> 

<node guid="38b0b0ef-0a62-4392-a607-ce1e708503a3" tag="3DMesh" imageindex="1" text="Single_variable_spring_hanger1_610_1_0"/> 

<node guid="c41ab0c6-2f91-4595-b015-204675d8eaa4" tag="3DMesh" imageindex="1" text="Single_variable_spring_hanger1_610_2_0"/> 

<node guid="1a01282c-c82f-4c63-afc4-35636972b499" tag="3DMesh" imageindex="1" text="Single_variable_spring_hanger1_610_3_0"/> 

나는 "GroupNode"에 도착을, 그때는 자식 요소의 GUID를 저장해야합니다. 그걸하기 위해서 ... 나는 그들을 통해 반복하고 내가 필요로하는 정보를 얻는 것을 생각하고있다.

아이들의 양을 늘리는 것처럼 보이지 않아서 나는 그들을 통해 forloop을 할 수 있습니다.

도와주세요.

여기에서 파일을 직렬화 해제하고 XML에서 트리 구조 (3D)를 만듭니다.

public void Deserialize(UserControl_Designer_Tree TreeView, string FileName) 
    { 
     XmlTextReader reader = null; 
     try 
     {     
      TreeView.Multiselect_Tree_View.BeginUpdate(); //Disabling re-drawing of treeview till all nodes are added. 

      reader = new XmlTextReader(FileName); 

      TreeNode parentNode = null; 

      while (reader.Read()) 
      { 
       if (reader.NodeType == XmlNodeType.Element) 
       { 
        if (reader.Name == XmlNodeTag) 
        { 
         TreeNode newNode = new TreeNode(); 
         bool isEmptyElement = reader.IsEmptyElement; 

         newNode = Node_Create(reader, TreeView); 
......... 

다음 스 니펫은 노드 유형을 반환하는 Node_Create() 메소드에서 가져옵니다. 이 그것을하는 최선의 방법 인 경우

이 나를 위해 일
if (nodeTag == "GroupNode") 
     { 
      XmlDocument doc = new XmlDocument(); 
      XmlNode myNode = doc.ReadNode(Reader); //Get current group node 

      List<string> meshGUIDs = new List<string>(); 
      int y = myNode.ChildNodes.Count; //The the amount of nodes in that group 

      if (y > 0) 
      { 
       for (int a = 0; a < y; a++) 
       { 

        Reader.Read(); 
        nodeGuid = Reader.GetAttribute(XmlNodeGuidAttribute); 
        meshGUIDs.Add(nodeGuid); 
       } 

       List<Basic_Mesh> meshes = new List<Basic_Mesh>(meshGUIDs.Count); 

       foreach (string meshGuiD in meshGUIDs) 
       { 
        Basic_Mesh mesh = Mesh_Guid_Search(Tree.Designer_3D._3DModels_List, meshGuiD); 
        meshes.Add(mesh); 
       } 

       Group_Data groupData = Tree.Designer_3D._3DGrouping.Create("Group", meshes); //Create a Basic_Group object in the clarity control. 
       return new Group_Node(nodeText, new List<Mesh_Node>(), groupData); 
      } 
     } 
+0

코드의이 섹션에 들어갈 때 '리더'는 어떤 상태에 있습니까? 이 섹션 앞에'Reader'가 어떻게됩니까? –

+0

이것은 완전한 XML인가 아니면 그것의 추출물인가? 문서에 여러 개의 "GroupNode"노드가 있습니까? – ilikebeets

+0

이것은 완전한 XML이 아닙니다. 여러 개의 "자식 노드"가있는 여러 "그룹 노드"가있을 수 있습니다. –

답변

0

...

while (Reader.Read()) 
{ 
if (Reader.NodeType == XmlNodeType.EndElement) 
break; 

nodeGuid = Reader.GetAttribute(XmlNodeGuidAttribute); 
meshGUIDs.Add(nodeGuid); 
} 

는 모르겠지만, 내 경우에 작동합니다.

감사합니다.