在 XML Linq Select 语句中使用 XNamespace
Using XNamespace in XML Linq Select statement
我的代码过去只需要处理一个命名空间,所以这个工作正常:
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 什么也找不到。有没有另一种写法 select 来使用命名空间?
显然
有很大的不同
Imports <xmlns="http://schema.infor.com/InforOAGIS/2">
并使用 XNamespace
Dim ns As XNamespace = "http://schema.infor.com/InforOAGIS/2"
所以,我最终做的是定义几个命名的全局命名空间,并在需要时按名称使用它们:所以
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
命名的全局命名空间可以表示为 Select 语句中所示。
我的代码过去只需要处理一个命名空间,所以这个工作正常:
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 什么也找不到。有没有另一种写法 select 来使用命名空间?
显然
有很大的不同Imports <xmlns="http://schema.infor.com/InforOAGIS/2">
并使用 XNamespace
Dim ns As XNamespace = "http://schema.infor.com/InforOAGIS/2"
所以,我最终做的是定义几个命名的全局命名空间,并在需要时按名称使用它们:所以
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
命名的全局命名空间可以表示为 Select 语句中所示。