Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB中LINQ到XML查询_Xml_Vb.net_Linq - Fatal编程技术网

VB中LINQ到XML查询

VB中LINQ到XML查询,xml,vb.net,linq,Xml,Vb.net,Linq,好的,我是LinqtoXML新手,需要一些帮助来设置我的查询。我在谷歌上搜索了几个小时,似乎每个不同的网站都有不同的方式,我真的很困惑。以下是我的XML: <?xml version = "1.0"?> <booking> <client> <id>0001</id> <name>Jack Loper</name> <numofseats>3&l

好的,我是LinqtoXML新手,需要一些帮助来设置我的查询。我在谷歌上搜索了几个小时,似乎每个不同的网站都有不同的方式,我真的很困惑。以下是我的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>
我希望查询的输出为:

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">
For Each ex in Query
    Console.WriteLine(ex.id + " " + ex.name)
Next
或者,或者:

Dim query = BookingDatabase.Descendants("client").Select(Function(ex) New With {.id = ex.Element("id").Value, .name = ex.Element("name").Value})
两者都返回相同的内容,即包含id和name的匿名类型的集合

那么在这些查询中发生了什么

首先,
BookingDatabase.subjections(“客户机”)将获得所有
client`节点的集合

接下来,“Select New With”将创建一个匿名类型,该类型将保存您使用此语句选择的值:

{
  .id = ex.Element("id").Value,
  .name = ex.Element("name").Value
}
最终的结果是,您得到了这些匿名类型的集合,然后可以像这样迭代:

<client id="00001">
For Each ex in Query
    Console.WriteLine(ex.id + " " + ex.name)
Next
请注意,您编写的代码将显示类似于
{id=0001,name=jackloper}
的内容,因为您只是在使用
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
}