1

私が取り組んでいるプロジェクトでは、XML の XSD を書き終えたところです。これにより、他のエンジニアが XML に簡単に取り組めるようになりました。この XSD とともに、XML 名前空間が登場しました。現在の解析コードでは、次のようなものを使用しています。

XElement element = xmlRoot.Element(XML.ELEMENT_NAME);

XML は、プログラム全体で XML の入力と出力に使用される定数でいっぱいのクラスです。しかし、名前空間が使用されるようになったため、これは機能しなくなりました。明らかですが、ほとんど洗練されていない解決策は、すべての解析コードを次のようにすることです。

XElement element = xmlRoot.Element(XML.NAMESPACE + XML.ELEMENT_NAME);

もっと考えてみると、拡張メソッドを定義してこの名前空間に追加し、XElement を返す方がはるかに優れているように見えます。このアイデアにより、コードは次のようになります。

XElement element = xmlRoot.GetMyElement(XML.ELEMENT_NAME);

これらのアイデアは、名前空間の問題に対処するためにこれまでに思いついたものです。基本的に、ここでの私の質問は次のとおり
です。既知の定数名前空間で XElements を解析するためのより良い方法はありますか? もしそうなら、それは何ですか?

4

1 に答える 1

2

まあ、誰も代替案を提供しておらず、私はすでにこれをコードに実装しています. それで、私は先に進み、これを答えとして入れて、これを締めくくることができます.

名前空間に自動的に追加される拡張メソッドを使用しました。これは、定数の名前空間がある場合にのみ機能することに注意してください! それ以外の場合は、奇妙な名前空間の連結を避けるために、拡張メソッドに別の引数を追加することをお勧めします。

      public static XElement
      GetNamespaceElement(this XElement element, string ns, string name)
      {
          XNamespace n = new XNamespace();
          n.NamespaceName = ns;
          return element.Element(n + name);
      }
于 2010-08-19T18:21:56.670 に答える