名前空間でXelementsを解析するためのエレガントなソリューション
-
29-09-2019 - |
質問
私が取り組んでいるプロジェクトでは、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を解析するためのより良い方法はありますか?もしそうなら、それは何ですか?
解決
まあ、誰も代替手段を提供していないので、私はすでにこれをコードに実装しています。それで、私はこれを答えとして、これを答えとして入れて、これを締めくくることができます。
先に進み、名前空間に自動的に追加された拡張法を使用しました。これは、一定の名前空間がある場合にのみ機能することに注意してください!それ以外の場合は、奇妙な名前空間の連結を避けるために、単に拡張機能に別の引数を追加することをお勧めします。
public static XElement
GetNamespaceElement(this XElement element, string ns, string name)
{
XNamespace n = new XNamespace();
n.NamespaceName = ns;
return element.Element(n + name);
}
所属していません StackOverflow