我的代码在点击按钮后调用此方法。此方法应使用行上的值在MessageBox键中打印。
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);
}
}
Method按照我想要的值打印每个键。 但最后一个键值方法打印两次。在source config.xml中只有3个键和3个值,但方法打印4个键和4个值。
这是输出的例子:
key1 myValue1
key2 myValue2
key3 myValue3
key3 myValue3
另一个例子:
狗窝织物 猫喵duck Quack
duck Quack
这是我的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 :(得分:1)
您的外部元素也称为“源”
所以,最后有2个“源”结束元素。
答案 1 :(得分: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 = "";
}
}