如何在xml文件中编写元素

时间:2014-03-20 14:17:59

标签: c# xml visual-studio-2013 xelement

我正在编写一个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

1 个答案:

答案 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;