Question

I have this XML File:

<?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.

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?

Was it helpful?

Solution

You need to import the namespace to use in XML literals.

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top