Reputation: 924
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?
Upvotes: 4
Views: 1041
Reputation: 78185
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
.
Upvotes: 5