[英]Linq to XML Element inside Element
我編寫了一種讀取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")...
和下面的一個。
您可以執行以下操作:
var query = from r in rootDocument.Descendants("result")
select new
{
Name = (string)r.Element("name"),
Age = (int?)r.Element("age"),
x = (string)r.Elements("info").Elements("x").SingleOrDefault(),
y = (string)r.Elements("info").Elements("x").SingleOrDefault(),
};
var resultList = query.ToList();
筆記:
選擇具有基本值的XElement
,可以將元素轉換為ac#基本值,例如string
或int?
通過使用XElement
的顯式轉換運算符之一 ,如下所示:
Name = (string)r.Element("name") Age = (int?)r.Element("age")
您看到未將對象引用設置為對象異常實例的事實表明,元素意外丟失。 如果<result>
元素之一缺少<info>
子元素,則很容易發生這種情況。 表達方式
r.Elements("info").Elements("x")
返回名為<info>
的子元素的所有名為<x>
的子元素。 然后, SingleOrDefault()
返回該序列的唯一元素;如果序列為空,則返回默認值。 這樣可以防止<info>
丟失時的情況。
同樣,如果缺少<age>
元素,則嘗試將其強制轉換為int
會拋出空引用異常,因為int
是一種值類型。 轉換為int?
而是返回null而不是引發異常。
最終的ToList()
評估查詢並以列表形式返回結果。
樣品提琴 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.