2015-10-30 54 views
0

我序列化字典XML的正常工作和如下生成每個項目:的XMLReader讀取屬性

<Parameters> 
    <item key="Input" value="CLOCK_SYNC" /> 
    <item key="Output" value="NTP_SYNC" /> 
    <item key="TimeSpan" value="00:00:30" /> 
    </Parameters> 

但是嘗試反序列化,這是給我一些頭痛的XML閱讀器,即時通訊試圖循環通過item元素並讀取屬性,但是我無法使用下面的代碼。我曾嘗試過各種方法來遍歷,但在兩種情況下成功的,即時通訊接近只是性格解析性格,並使其工作方式但是我相信IM忽視的東西

public void ReadXml(System.Xml.XmlReader reader) 
    { 
     bool wasEmpty = reader.IsEmptyElement; 
     reader.MoveToContent(); 

     if (wasEmpty) 
      return; 

     while (reader.NodeType != System.Xml.XmlNodeType.EndElement) 
     { 
      reader.MoveToAttribute("key"); 

      string key = reader.GetAttribute("key"); 

      reader.MoveToAttribute("value"); 

      string value = reader.GetAttribute("value"); 

      this.Add(key, value); 

      reader.MoveToContent(); 
     } 

它的錯誤了,因爲我不能解析屬性,它們都返回Null。

+0

那麼你的當前代碼會發生什麼? –

+0

我的不好,因爲鍵和值都是空的,所以出錯。我根本看不到讀者的屬性。所以它讀取項目就好了,但然後我不能解析屬性。 – Martin

+0

你有*是否可以使用XmlReader,順便說一句?使用LINQ to XML使得這種事情變得簡單得多...(或者,你可以混合使用這兩種...) –

回答

0

修正了它現在有很多額外的讀取,但它的工作,仍然困惑ReadStartElement和MoveToContent,但哦。

public void ReadXml(System.Xml.XmlReader reader) 
    { 
     bool wasEmpty = reader.IsEmptyElement; 
     // jump to <parameters> 
     reader.Read(); 

     if (wasEmpty) 
      return; 

     while (reader.NodeType != System.Xml.XmlNodeType.EndElement) 
     { 
      // jump to <item> 
      reader.MoveToContent(); 

      reader.MoveToAttribute("key"); 

      string key = reader.GetAttribute("key"); 

      reader.MoveToAttribute("value"); 

      string value = reader.GetAttribute("value"); 

      this.Add(key, value); 

      reader.ReadStartElement("item"); 

      reader.MoveToContent(); 
     } 
    }