我上课时使用Axis Properties来导航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之外,子类的许多函数和子函数将完全相同。因此,在基类中导入名称空间将不起作用。如果我在子类中导入名称空间,那么我必须复制所有函数和子函数。
答案 0 :(得分:0)
我找不到动态切换要导入的命名空间的解决方案,所以我重新设计了xml架构并从所有“urn:company:name”命名空间中删除了版本号。显然这并不理想,因为情况可能(并且可能会)出现需要导入我无法控制的不同版本的命名空间,即gml / 3.2 vs gml / 3.3。