2013-04-05 63 views
0

我在使用Axis Properties导航XElements的类上。在这样做的时候,我使用了import语句来导入xml名称空间。我想使用相同的类来处理不同版本的xml文件,它们对名称空间具有不同的URI,但具有相同的前缀。如何导入带有多个URI的xml名称空间

如果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

我找不到一个解决方案来动态切换要导入的名称空间,所以我重新设计了xml模式,并从所有“urn:company:name”命名空间中删除了版本号。很明显,这并不理想,因为如果需要导入不同版本的命名空间,我不能控制gml/3.2 vs gml/3.3,情况可能(也可能会出现)。