在XML Linq Select语句中使用XNamespace

在XML Linq Select语句中使用XNamespace,xml,vb.net,linq,namespaces,Xml,Vb.net,Linq,Namespaces,我的代码过去只需要处理一个名称空间,所以这很好: Imports <xmlns="http://schema.infor.com/InforOAGIS/2"> Dim doc As XDocument = XDocument.Load("my.xml") Dim IDElemCollect As IEnumerable(Of XElement) = _ From IdEl In doc ...<ItemID>.<ID> _ Select IdEl

我的代码过去只需要处理一个名称空间,所以这很好:

Imports <xmlns="http://schema.infor.com/InforOAGIS/2">

Dim doc As XDocument = XDocument.Load("my.xml")

Dim IDElemCollect As IEnumerable(Of XElement) = _
  From IdEl In doc ...<ItemID>.<ID> _
  Select IdEl
但是现在我要求程序处理更多的文档,其中一些文档具有不同的名称空间。此特定方法只需处理一个特定名称空间,因此我认为编写此方法可以:

Dim doc As XDocument = XDocument.Load("my.xml")
Dim ns As XNamespace = "http://schema.infor.com/InforOAGIS/2"
Dim IDElemCollect As IEnumerable(Of XElement) = _
  From IdEl In doc ...<ns:ItemID>.<ns:ID> _
  Select IdEl
但是VS2013编译器抱怨说 错误1未定义XML命名空间前缀“ns”


显然,如果我不使用名称空间,我的select将什么也找不到。是否有其他方法编写此选择以使用名称空间?

显然,这两种方法之间有很大的区别

Imports <xmlns="http://schema.infor.com/InforOAGIS/2">
所以,我最终做的是定义几个命名的Globalnamespaces,并在需要时按名称使用它们:所以

Imports <xmlns:ns="http://schema.infor.com/InforOAGIS/2">
Imports <xmlns:nw="http://some.other.schema/blah">

Dim doc As XDocument = XDocument.Load("my.xml")
Dim IDElemCollect As IEnumerable(Of XElement) = _
 From IdEl In doc ...<ns:ItemID>.<ns:ID> _
 Select IdEl

命名的globalnamespace可以如Select语句所示表示。

为什么不导入多个前缀不同的名称空间呢。e、 g.进口和进口。如果需要,可以将其保留为当前导入的默认值。然后你可以在你的选择中使用这些前缀。谢谢,我几乎和你回答的一样快就知道了,但这就是我最终的结果,请看答案。
Imports <xmlns:ns="http://schema.infor.com/InforOAGIS/2">
Imports <xmlns:nw="http://some.other.schema/blah">

Dim doc As XDocument = XDocument.Load("my.xml")
Dim IDElemCollect As IEnumerable(Of XElement) = _
 From IdEl In doc ...<ns:ItemID>.<ns:ID> _
 Select IdEl