我知道关于这个话题有很多问题,但我尝试过的例子中没有一个对我有用。
我有一个现有的XML文档,其构造如下:
<root>
<ElementA>
<element1>sometext</element1>
<element2>sometext</element2>
<element3>sometext</element3>
</ElementA>
<ElementA>
<element1>sometext</element1>
<element2>sometext</element2>
<element3>sometext</element3>
</ElementA>
<ElementB>
<element1>sometext</element1>
<element2>sometext</element2>
<element3>sometext</element3>
<element4>sometext</element4>
<element5>sometext</element5>
</ElementB>
<ElementB>
<element1>sometext</element1>
<element2>sometext</element2>
<element3>sometext</element3>
<element4>sometext</element4>
<element5>sometext</element5>
</ElementB>
<ElementC>
<element1>sometext</element1>
<element2>sometext</element3>
</ElementC>
<ElementC>
<element1>sometext</element1>
<element2>sometext</element2>
</ElementC>
</root>
我需要找到所有的ElementA,B和Cs,并创建一个objA等类型的新对象,其属性对应于相应元素的子元素。下面是我尝试过的示例代码。
var doc = XElement.Load(filename);
var data = from ele in doc.Elements()
where ele.Name.LocalName.Equals("ElementA")
select new objA
{
name = ele.Element("element1").Value
address = ele.Element("element2").Value
};
但是当我尝试遍历“data”集合时,这会抛出一个null异常错误。我不理解的是什么?
答案 0 :(得分:1)
您可以使用Elements("tagName")
var data = from ele in doc.Elements("ElementA")
select new objA
{
name = (string)ele.Element("element1"),
address = (string)ele.Element("element2")
};
您还应该使用(string)XElementInstance
代替XElementInstance.Value
,以避免在XML中不存在元素时NullReferenceException
。
上面粘贴的代码会为您的示例输入数据返回2个元素。