簡體   English   中英

在迭代XML LINQ查詢時訪問嵌套元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM