[英]Accessing nested elements while iterating an XML LINQ query?
使用此XML數據:
<item>
<placemarks>
<placemark>
<uid>{EA5FA2B2-78CB-4FAA-9F17-EBB361410499}</uid>
</placemark>
</placemarks>
<links>
<link>
<title>Book Online</title>
<link>https://blah</link>
</link>
<link>
<title>Call to Book</title>
<link>tel:1-866-555-5555</link>
</link>
</links>
</item>
我正在嘗試使用XML創建帶有各種屬性的Hotel對象。 一切正常,直到我打了嵌套的XML標簽,然后被卡住:
var items = root.Descendants ("item");
var hotels = from it in items
select new Hotel () {
Uid = it.Element ("uid").Value,
Name = it.Element ("name").Value,
Description = it.Element ("description").Value,
ImageUrl = it.Element ("image_url").Value,
RoomType = it.Element("custom_1").Value,
PlacemarkId = it.Element("placemarks").Element("placemark").Element("uid").Value,
BookUrl = (from links in it.Descendents("links") where links.Element("link").Element("title) = "Book Online").Value
};
如何使PlacemarkId正常工作? 我會一直為null,因為第一個Element(“ placemarks”)之后的方法顯然失敗了:-(而且,顯然,設置BookUrl屬性不會編譯,但這是我想做的。由於怪異,這確實很丑陋帶嵌套鏈接標記的XML模式:-(
對不起,菜鳥問題。 我嘗試過搜索“嵌套xml linq select”的每個組合,我想起來可能沒有運氣:-P如果有人可以讓我知道我要執行的操作在LINQ中可以提供更多幫助。 我認為有可能...
提前致謝 :-)
您可以使用XPathSelectElement()
擴展方法來避免null引用異常,以防某些<item>
沒有placemark
子(不必從C#代碼中手動檢查null):
var hotels = from it in items
select new Hotel()
{
......
......
PlacemarkId = (string)it.XPathSelectElement("placemarks/placemark/uid"),
BookUrl = (string)it.XPathSelectElement("links/link[title='Book Online']/link"),
};
BookUrl
還可以使用XPath來獲取BookUrl
值。 或者,如果您確定此部分的XML結構是一致的(不會丟失任何元素),則可以使用LINQ而不進行null檢查,如下所示:
BookUrl = (from link in it.Elements("links").Elements("link")
where (string)link.Element("title") == "Book Online"
select link.Element("link")).First().Value
以供參考 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.