简体   繁体   English

在VB.NET中使用带有命名空间的LINQ

[英]Using LINQ in VB.NET with namespaces

I have this XML File: 我有这个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>

and this code: 而这段代码:

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

If I take out the xmlns="HTTP..." my code outputs "NuSpecID", but I cannot find a solution that allows me to parse/query this XML with the namespace still attached. 如果我取出xmlns="HTTP..."我的代码输出“NuSpecID”,但我找不到一个解决方案,允许我解析/查询这个XML仍然附加名称空间。

I also have some files that do not have a namespace or have a different one, how do I determine whether or not to use one and which one to use? 我也有一些没有命名空间或有不同名称的文件,我如何确定是否使用一个和哪个使用?

You need to import the namespace to use in XML literals. 您需要导入名称空间以在XML文本中使用。

At the top of the module, put: 在模块的顶部,放:

Imports <xmlns:ns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">

Then in your function: 然后在你的功能:

Dim tests = root.<ns:metadata>

For Each el In tests
    Console.WriteLine(el.<ns:id>.Value)
Next

Obviously you can use anything instead of ns . 显然你可以使用任何东西而不是ns

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM