【发布时间】:2017-10-06 06:15:31
【问题描述】:
我编写了一个读取 XML 并将信息写入对象的方法。 XML 包含带有信息的元素,但是一些信息被封装了,我不知道如何从中获取信息。 XML 包含大约 200 个“结果”。
XML 结构
<result id="xxxxx">
<name>Name</name>
<age>25</age>
<info>
<x>Some text</x>
<y>More Text</y>
</info>
</result>
代码
XDocument rootDocument = XDocument.Load(file);
var xy = from r in rootDocument.Descendants("result")
select new
{
Name = r.Element("name")
Age = r.Element("age"),
x = r.Element("info").Element("x"),
y = r.Element("info").Element("y"),
};
foreach (var r in xy)
{
Object o = new Object()
{
Name = r.Name,
Age = r.Age,
x = r.x,
y = r.y
};
}
错误 对象引用未设置为对象的实例。
错误发生在该行
x = r.Element("info")...
还有下一个。
【问题讨论】:
-
您是否收到错误或警告?我没有看到问题(
Object o = new Object();行的语法错误除外)。 -
是的,它已被编辑。我不知道为什么。我再补充一下。
-
是否存在
info没有x和y值的XML 节点? -
总是一样的。 X 和 Y 节点可以为空,但不能不存在。
-
查看Jon's answer here。它描述了一种安全的空值检查方法。基本上像
x = r.Element("info") != null ? r.Element("info").Element("x"), : null这样的东西也可以工作。
标签: c# xml linq-to-xml