在XML Linq Select语句中使用XNamespace

时间:2015-03-11 16:40:58

标签: 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

但是现在我要求程序处理更多文档,其中一些文档具有不同的名称空间。这个特殊的方法只需处理一个特定的命名空间,所以我写这个会起作用:

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”。

而且,显然,如果我不使用命名空间,我的选择什么也找不到。有没有其他方法可以编写此选择以使用命名空间?

1 个答案:

答案 0 :(得分:0)

显然

之间存在很大差异
Imports <xmlns="http://schema.infor.com/InforOAGIS/2">

并使用XNamespace

Dim ns As XNamespace = "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语句。