簡體   English   中英

VB中的LINQ to XML查詢

[英]LINQ to XML Query in VB

好的,我是LINQ to XML的新手,需要一些幫助來設置我的查詢。 我已經搜索了幾個小時,似乎每個不同的網站都有不同的方式來做,我真的很困惑。 這是我的XML:

<?xml version = "1.0"?>
<booking>
    <client>
        <id>0001</id>
        <name>Jack Loper</name>
        <numofseats>3</numofseats>
        <seats>C1C2C3</seats>
        <cost>30</cost>
    </client>
    <client>
        <id>0002</id>
        <name>Joe Bloggs</name>
        <numofseats>1</numofseats>
        <seats>D8</seats>
        <cost>10</cost>
    </client>
</booking>

現在,我已成功將文檔加載到VB中:

Dim BookingDatabase As XDocument
BookingDatabase = XDocument.Load(My.Application.Info.DirectoryPath & "\Booking_Database.xml")

我希望查詢的輸出為:

0001傑克·洛珀0002喬·博格斯

我將如何設置查詢? 目前我有這個,但是我不知道我到底在干什么:

Dim query = From ex In BookingDatabase.Descendants.Elements("client")
                    Select id = ex.Attribute("id").Value
        For Each ex In query
            Console.WriteLine(ex)
        Next

如果您可以解釋每個步驟,那將很好。 謝謝

您可能已經想出了解決方法,但是如果您沒有(或將來的其他人遇到相同的問題,並且在搜索中遇到您的問題),則有兩種方法可以做到(語法上),但概念相同。

除了要查找確實在元素上的屬性(“ id”)外,查詢的路徑是正確的。 如果它是一個屬性,它將看起來像這樣:

<client id="00001">

您想要做的是返回一個匿名類型的集合-該類型的每個實例將保存您告訴它的所有值(在這種情況下,為id和name)。 首先是代碼:

Dim query = From ex In BookingDatabase.Descendants("client")
            Select New With {
                .id = ex.Element("id").Value,
                .name = ex.Element("name").Value
            }

或者,或者:

Dim query = BookingDatabase.Descendants("client").Select(Function(ex) New With {.id = ex.Element("id").Value, .name = ex.Element("name").Value})

兩者都返回相同的東西,即包含id和name的匿名類型的集合。

那么這些查詢中發生了什么?

首先, BookingDatabase.Descendants("client") is getting a collection of all the節點的集合。

接下來,“ Select New With”將創建一個匿名類型,該類型將保存您通過此語句選擇的值:

{
  .id = ex.Element("id").Value,
  .name = ex.Element("name").Value
}

最終結果是您獲得了這些匿名類型的集合,然后可以像下面這樣迭代:

For Each ex in Query
    Console.WriteLine(ex.id + " " + ex.name)
Next

請注意,您編寫的代碼將顯示類似{ id = 0001, name = Jack Loper }因為您只是在使用ex 使用匿名類型,您可以獲得可以使用的屬性。

如果您已經定義了一個類,請說:

Public Class Clients

    Public Property ID As String
    Public Property Name As String

End Class

您可以使用以下命令返回類型化對象的集合:

Select New Clients With {
     .ID = ex.Element("id").Value,
     .Name = ex.Element("name").Value
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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