我有這樣的代碼:有沒有更好的方法來讀取LINQ到XML中的XML後代?
string result = xml.Root.Descendants("XYZ").Descendants("ABC").Descendants("MNO").Single().Value;
1)是否有更好的方式來閱讀的價值?一些不依賴於節點深度的泛型,我必須去?
2)刪除「XYZ」,「ABC」等硬編碼依賴的方法是什麼?
我有這樣的代碼:有沒有更好的方法來讀取LINQ到XML中的XML後代?
string result = xml.Root.Descendants("XYZ").Descendants("ABC").Descendants("MNO").Single().Value;
1)是否有更好的方式來閱讀的價值?一些不依賴於節點深度的泛型,我必須去?
2)刪除「XYZ」,「ABC」等硬編碼依賴的方法是什麼?
目前還不清楚你的真正含義,但這是你所追求的嗎?
public IEnumerable<XElement> PathDescendants(
this XElement element,
params XName[] names)
{
return new[] { element }.PathDescendants(names);
}
public IEnumerable<XElement> PathDescendants(
this IEnumerable<XElement> elements,
params XName[] names)
{
return names.Aggregate(elements,
(current, name) => current.Descendants(name));
}
然後,您可以撥打:
string result = xml.Root.PathDescendants("XYZ", "ABC", "MNO").Single().Value;
是的;但是在實現這個時,我得到一個錯誤,說擴展方法應該是靜態的。這些是作爲擴展方法嗎? – GilliVilla 2011-01-20 19:52:06
如果你不關心父節點的依賴關係,你可以直接去"MNO"
在你的後代調用。
xml.Root.Descendants("MNO")
但是,這會產生MNO
後裔,無論他們可能在你的XML結構顯示的序列。
<root>
<MNO />
<ABC>
<MNO />
</ABC>
<ABC>
<XYZ>
<MNO />
</XYZ>
</ABC>
</root>
全部MNO
元素將在序列中。
你可能包括要查詢幫助我們使你的查詢感XML文檔的片段? – 2011-01-20 17:47:44