我正在编写一个xml文件,但是当我开始编写元素时,它会出现一些错误,当我尝试通过代码读取xml文件时,它找不到这些元素。
<?xml version="1.0" encoding="utf-8" ?>
<options>
<difficulty>
<type name="Easy" health="6" active="0"/>
<type name="Normal" health="4" active="1"/>
<type name="Hard" health="2" active="0"/>
</difficulty>
<soundvolume>
<type name="Sound" value="100"/>
<type name="tempSound" value="100"/>
</soundvolume>
</options>
到目前为止这是xml代码,但如果我无法继续工作,我不想继续。
这是我得到的错误:
无法找到元素'options'的架构信息。
并且每个元素都有相同的错误。 我使用visual studio 2013并拥有一个Windows Forms Application C#项目
这是我读取xml文件的方式:
StreamReader sr = new StreamReader("Options.xml");
String xmlsr = sr.ReadToEnd();
sr.Close();
XElement xDocumentSr = XElement.Parse(xmlsr);
XElement xOptionsSr = xDocumentSr.Element("options");
XElement xDifficultySr = xOptionsSr.Element("difficulty");
foreach (XElement xType in xDifficultySr.Descendants("type"))
{
if(Convert.ToInt32(xType.Attribute("activate").Value) == 1)
{
labDifficulty.Text = xType.Attribute("name").Value;
}
}
错误发生在她:
XElement xOptionsSr = xDocumentSr.Element("options");
我收到此错误:
Splash Screen.exe中出现未处理的“System.NullReferenceException”类型异常
附加信息:未将对象引用设置为对象的实例。
当处于调试模式时,我可以看到该元素是= null
答案 0 :(得分:0)
下面:
XElement xDocumentSr = XElement.Parse(xmlsr);
XElement xOptionsSr = xDocumentSr.Element("options");
xDocumentSr
本身options
。所以你正在寻找自己内部的options
元素。你不需要xDocumentSr.Element("options");
。你可以简化代码这样:
var xmlDocument = XDocument.Load("Options.xml");
var element = xmlDocument.Root
.Element("difficulty")
.Elements("type")
.FirstOrDefault(x => (int)x.Attribute("active") == 1);
if(element != null)
labDifficulty.Text = element.Attribute("name").Value;