我正在尝试从xml文件导入数据并按顺序对它们进行排序,但是当我运行它时,我得到“对象引用未设置为对象的实例”。这是我正在使用的代码片段。
XElement data = XElement.Load("blockData.xml");
var sortedElements =
from c in data.Element("BLOCKS").Elements("BLOCK")
orderby (string)c.Element("X") descending,
(string)c.Element("Y") descending,
(string)c.Element("Z") descending
select new
{
name1 = (string)c.Element("NAME"),
X1 = (string)c.Element("X"),
Y1 = (string)c.Element("Y"),
Z1 = (string)c.Element("Z")
};
foreach (var r in sortedElements)
Console.WriteLine("X:{0} Y:{1} Z:{2} Name:{3}",
r.X1, r.Y1, r.Z1, r.name1);
XML文件中包含的内容样本
<BLOCKS>
<BLOCK>
<NAME>B1</NAME>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</BLOCK>
</BLOCKS>
答案 0 :(得分:0)
尝试:
var sortedElements =
from c in data.Root.Elements("BLOCK")
因为BLOCKS是XML的根。
答案 1 :(得分:-1)
在接受了你们有些人已经吮吸并研究过这样的其他问题之后,我发现你需要显式访问节点的值,如下所示,以克服空引用异常的问题
var sortedElements =
from c in data.DescendantsAndSelf("BLOCKS").Elements("BLOCK")
orderby
c.Element("X").Value descending,
c.Element("Y").Value descending,
c.Element("Z").Value descending
select new
{
name1 = (string)c.Element("NAME"),
X1 = (string)c.Element("X"),
Y1 = (string)c.Element("Y"),
Z1 = (string)c.Element("Z")
};
foreach (var r in sortedElements)
Console.WriteLine("X:{0} Y:{1} Z:{2} Name:{3}",
r.X1, r.Y1, r.Z1, r.name1);
以及将根元素添加到XML文件
<root>
<BLOCKS> . . . </BLOCKS>
</root>