2012-03-04 42 views
0

我在嘗試閱讀XML文件,但是當我閱讀它時,它只拾取我的組元素的最後一個值,而不是設置組的文本屬性每個組別的宣告休息。所有的幫助表示讚賞。當閱讀XML文件時,只獲取組元素文本的最後一個元素

public static void ReadFile() 
{ 
    string MyText = string.Empty; 
    string Notes = string.Empty; 
    string UserName = string.Empty; 
    string Password = string.Empty; 
    string Url = string.Empty; 
    string Title = string.Empty; 
    string MyGroup = string.Empty; 

    Group group = new Group("Hello", 0); 

    XmlTextReader xmlReader = new XmlTextReader("C:/KeyText.xml"); 
    while (xmlReader.Read()) // Read nodes sequentially 
    { 
     if (xmlReader.Name == "Group" & xmlReader.NodeType.ToString() == "EndElement") 
     { 
      group.Text = MyText; 
      AddGroupXML(group); 
     } 

     if (xmlReader.NodeType == XmlNodeType.Element) 
     { 
      if (xmlReader.LocalName == "Text") 
      { 
       MyText = xmlReader.ReadString(); 
      } 

      if (xmlReader.LocalName == "Notes") 
      { 
       Notes = xmlReader.ReadString(); 
      } 

      if (xmlReader.LocalName == "UserName") 
      { 
       UserName = xmlReader.ReadString(); 
      } 

      if (xmlReader.LocalName == "Password") 
      { 
       Password = xmlReader.ReadString(); 
      } 

      if (xmlReader.LocalName == "Url") 
      { 
       Url = xmlReader.ReadString(); 
      } 

      if (xmlReader.LocalName == "Title") 
      { 
       Title = xmlReader.ReadString(); 
      } 
     } 

     if (xmlReader.Name == "Key" & xmlReader.NodeType.ToString() == "EndElement") 
     { 
      Key MyKey = new Key(); 
      MyKey.Notes = Notes; 
      MyKey.Title = Title; 
      MyKey.UserName = UserName; 
      MyKey.Url = Url; 
      MyKey.Password = Password; 

      group.Keys.Add(MyKey); 
     } 
    } 

    xmlReader.Close(); 
    GroupsRead.Invoke(); 
} 

XML:

<?xml version="1.0"?> 
<Groups> 
    <Group> 
    <ImageIndex>0</ImageIndex> 
    <Text>wcwpgcuotlx</Text> 
    <Keys> 
     <Dog/> 
     <Key> 
     <Notes>4ktaiyduner</Notes> 
     <Password>0y2cg1kodre</Password> 
     <Title>a2yj4biqd5u</Title> 
     <Url>de2uym5vyg1</Url> 
     <UserName>ogcl3uyvy2r</UserName> 
     </Key> 
     <Key> 
     <Notes>3dmchyaqcvt</Notes> 
     <Password>lbgfralkng4</Password> 
     <Title>fnha4ienzua</Title> 
     <Url>n3pmk5elaso</Url> 
     <UserName>njk55ov4eef</UserName> 
     </Key> 
    </Keys> 
    </Group> 
    <Group> 
    <ImageIndex>0</ImageIndex> 
    <Text>vrmijzokft2</Text> 
    <Keys> 
     <Dog/> 
    </Keys> 
    </Group> 
</Groups> 
+0

並非每個組都包含Key元素,但它們都包含Group元素。感謝您的建議。 – 2012-03-04 08:52:06

+0

你的代碼似乎工作正常,它在AddGroupXML中輸入2次,使用正確的Text屬性集 – ionden 2012-03-04 08:56:45

+0

我很害怕這一點。感謝檢查出來。 (xmlReader.Name ==「Group」&xmlReader.NodeType.ToString()==「EndElement」) – 2012-03-04 09:01:25

回答

0

我覺得你的問題是,你有你使用的所有組一個Group對象。所以,由於每次調用AddGroupXML()都有相同的參數,結果會多次包含同一個對象。文本值將是您爲其設置的最後一個值。

爲了解決這個問題,更改添加組類似的代碼:

group.Text = MyText; 
AddGroupXML(group); 
group = new Group("Hello", 0); 

在未來,如果你使用的LINQ to XML處理XML可能更容易。如果你使用它,你的代碼會簡單得多。 (這種方法的缺點是它將整個XML加載到內存中,這對於巨大的XML文件來說是個壞主意。)

+0

這似乎是它是什麼。非常感謝。這將很高興再次入睡。看起來LINQ似乎是一個很好的選擇。希望我不是一個線性思維者。 – 2012-03-05 00:44:35