0

わかりました。LINQ to XML を初めて使用するので、クエリをセットアップするのに助けが必要です。私は何時間もグーグルで検索しましたが、すべての異なるWebサイトには異なる方法があるようで、本当に混乱しています. ここに私の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

各ステップを説明できれば、それは素晴らしいことです。ありがとう

4

1 に答える 1

1

あなたはすでにこれを行う方法を理解しているかもしれませんが、そうしなかった場合 (または、将来他の誰かが同じ問題を抱えていて、検索であなたの質問に出くわした場合)、それを行う方法がいくつかあります (構文的に) ) ですが、コンセプトは同じです。

実際に要素にある属性(「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
}
于 2013-04-28T22:15:47.553 に答える