0
我知道關於這個主題有很多問題,但是我沒有嘗試過的例子都適用於我。C#通過LINQ解析XML來創建自定義對象
我有被構造像這樣現有的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
};
但是,當我嘗試迭代「數據」集合時,會拋出一個空的異常錯誤。我不瞭解什麼?
不適用於我。 「數據」結束爲空。我曾嘗試過您的解決方案,但它似乎像doc.Elements(「ElementA」)沒有找到ElementA。這就是爲什麼我必須使用「where ele.Name.LocalName.Equals()」 – 2013-03-24 14:39:21
因此,您的真實數據必須是不正確的。我已經用你的示例測試了它,並且工作正常。 – MarcinJuraszek 2013-03-24 14:40:51
的確,我想知道這個XML文檔是不是有些奇怪。我給出的例子不是原始數據,而是代表邏輯佈局。不幸的是,我不得不使用這個特殊的XML文件。如果以前使用foreach循環和switch/case,但是它非常難看,我已經成功解析了。 – 2013-03-24 14:48:41