0

XElements をナビゲートするために Axis プロパティを使用しているクラスがあります。その際、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 に答える