0

我有一个使用轴属性来导航 XElements 的类。为此,我使用了 import 语句来导入 xml 命名空间。我想使用同一个类来处理不同版本的 xml 文件,它们的命名空间有不同的 URI,但前缀相同。

如果是 1.0 版,那么

imports <xmlns:name1="urn:company:name1:1.0">
imports <xmlns:name2="urn:company:name2:1.0">
imports <xmlns:gml="http://www.opengis.net/gml/3.2">

如果是 2.0 版,那么

imports xmlns:name1="urn:company:name1:2.0"
imports <xmlns:name2="urn:company:name2:2.0">
imports <xmlns:gml="http://www.opengis.net/gml/3.2">


public class myObject
  public Function GetElements(byval inXElement as XElement) as IEnumerable(of XElement)
    dim IXElement = from myElement in inXElement...<name1:ElementName> select myElement 
    return IXElement
  end function
end class

我确信这可以通过为从基类继承的每个版本创建不同的对象来实现,但希望能够更快一些并且需要更少的代码重复。除了与前缀关联的 URI 之外,子类的许多功能和子类将完全相同。所以在基类中导入命名空间是行不通的。如果我在子类中导入命名空间,那么我必须复制所有函数和子类。

4

1 回答 1

0

我找不到动态切换要导入的命名空间的解决方案,因此我重新设计了 xml 模式并从所有“urn:company:name”命名空间中删除了版本号。显然这并不理想,因为在需要导入我无法控制的不同版本的命名空间的情况下可能(并且可能会)出现这种情况,即 gml/3.2 与 gml/3.3。

于 2013-06-13T12:07:47.123 回答