在VB.NET中与名称空间一起使用LINQ

在VB.NET中与名称空间一起使用LINQ,.net,xml,vb.net,linq,.net,Xml,Vb.net,Linq,我有一个XML文件: <?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>NuSpecID</id> <version>1.0.0</version> <title>NuSpec Sample</

我有一个XML文件:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>NuSpecID</id>
    <version>1.0.0</version>
    <title>NuSpec Sample</title>
    <authors>Jim Bob</authors>
    <owners>Billy Joel</owners>
    <licenseUrl>http://url.goes.here</licenseUrl>
    <projectUrl>http://url.goes.there</projectUrl>
    <requireLicenseAcceptance>ture</requireLicenseAcceptance>
    <description>this is a sample nuget.</description>
    <summary>
  </metadata>
</package>

努斯派克
1.0.0
NuSpec样品
吉姆·鲍勃
比利·乔尔
http://url.goes.here
http://url.goes.there
图雷
这是一个例子。
该代码:

Module Module1
    Sub Main()
        Dim root As XElement = XElement.Load("c:\tmp\nuspec.xml")
        Dim tests As IEnumerable(Of XElement) = _
            From el In root.<metadata> _
            Select el
        For Each el As XElement In tests
            Console.WriteLine(el.<id>.Value)
        Next
        Console.ReadKey()
    End Sub
End Module
模块1
副标题()
Dim root为XElement=XElement.Load(“c:\tmp\nuspec.xml”)
作为IEnumerable(像素)的Dim测试=_
从el的根部开始_
选择el
对于测试中的每个el组件
控制台写入线(el..Value)
下一个
Console.ReadKey()
端接头
端模块
如果我取出
xmlns=“HTTP…”
我的代码输出“NuSpecID”,但我找不到一个解决方案,允许我解析/查询仍然附加名称空间的XML

我还有一些文件没有名称空间或有不同的名称空间,如何确定是否使用名称空间以及使用哪个名称空间?

您需要在XML文本中使用

在模块顶部,放置:

导入
然后在您的函数中:

Dim tests=root。
对于测试中的每个el
控制台写入线(el..Value)
下一个

显然,您可以使用任何名称空间来代替
ns

,或者您可以使用
Imports
设置默认名称空间,这样您就不必每次都指定名称空间。我已经调整了我的问题,根据我选择的文件,我有多个名称空间选项。如何编写一个可以具有不同名称空间的函数?@B3RV您应该知道XML使用的名称空间,这就是名称空间的全部意义。如果您确实知道每个文件包含的名称空间,
将它们导入到模块顶部,并使用不同的前缀。如果您不知道名称空间,这意味着您不关心它们以及忽略它们的内容,那么可以从Root.Elements中的el以
的形式编写XML查询,其中el.Name.LocalName=“metadata”选择el