2013-10-08 89 views
0

我的代碼在點擊按鈕後調用此方法。這個方法應該在帶有行上的值的MessageBox鍵中打印。XAML閱讀器重複打印

public static void LoadFromFile() 
{ 
    try 
    { 
     using (XmlReader xr = XmlReader.Create(@"config.xml")) 
     { 
      string sourceValue = ""; 
      string sourceKey = ""; 
      string element = ""; 
      string messageBox = ""; 

      while (xr.Read()) 
      { 
       if (xr.NodeType == XmlNodeType.Element) 
       { 
        element = xr.Name; 
        if (element == "source") 
        { 
         sourceKey = xr.GetAttribute("key"); 
        } 
       } 
       else if (xr.NodeType == XmlNodeType.Text) 
       { 
        if (element == "value") 
        { 
         sourceValue = xr.Value; 
        } 
       } 
       else if ((xr.NodeType == XmlNodeType.EndElement) && (xr.Name == "source")) 
       { 
        // there is problem 
        messageBox += sourceKey + " " + sourceValue + "\n"; 
       } 
      } 
      MessageBox.Show(messageBox); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("" + ex); 
    } 
} 

方法打印每個鍵的數值正是我想要的。 但是最後一個鍵與值方法打印兩次。在源碼config.xml中只有3個鍵和3個值,但方法打印4個鍵和4個值。

這是實施例輸出的:

KEY1 myValue1

KEY2 myValue2

KEY3 myValue3

KEY3 myValue3

而另一個例子:

狗汪汪

貓喵

鴨子嘎嘎

鴨子嘎嘎

這是我的XAML代碼:

<?xml version="1.0" encoding="utf-8"?> 

<source> 
    <source key="key1"> 
    <value>myValue1</value> 
    </source> 
    <source key="key2"> 
    <value>myValue2</value> 
    </source> 
    <source key="key3"> 
    <value>myValue3</value> 
    </source> 
</source> 
+0

您可以添加您的XAML嗎? –

+0

@EliArbel我的問題已更新。 –

回答

1

你的外部元件也被稱爲「源」

所以,在端部有2個「源極」結束元素。

1

的問題是,source使你打印值的兩倍根的閉合元件。您可以通過爲根元素選擇不同的名稱或通過更改方法來解決此問題,例如:

while (xr.Read()) 
{ 
    if (xr.NodeType == XmlNodeType.Element) 
    { 
     element = xr.Name; 
     if (element == "source") 
     { 
      sourceKey = xr.GetAttribute("key"); 
     } 
    } 
    else if (xr.NodeType == XmlNodeType.Text) 
    { 
     if (element == "value") 
     { 
      sourceValue = xr.Value; 
     } 
    } 
    else if (sourceValue != "" && (xr.NodeType == XmlNodeType.EndElement) && (xr.Name == "source")) 
    { 
     // there is problem 
     messageBox += sourceKey + " " + sourceValue + "\n"; 
     sourceValue = ""; 
    } 
}