web-dev-qa-db-ja.com

XElementによって作成されたノードから空のxmlns属性を削除するにはどうすればよいですか

これは私のコードです:

XElement itemsElement = new XElement("Items", string.Empty);
//some code
parentElement.Add(itemsElement);

その後、私はこれを得ました:

<Items xmlns=""></Items>

親要素には名前空間がありません。空の名前空間属性なしでItems要素を取得するにはどうすればよいですか?

34
GrzesiekO

名前空間の扱い方がすべてです。以下のコードは、異なる名前空間を持つ子アイテムを作成します。

XNamespace defaultNs = "http://www.tempuri.org/default";
XNamespace otherNs = "http://www.tempuri.org/other";

var root = new XElement(defaultNs + "root");
root.Add(new XAttribute(XNamespace.Xmlns + "otherNs", otherNs));

var parent = new XElement(otherNs + "parent");
root.Add(parent);

var child1 = new XElement(otherNs + "child1");
parent.Add(child1);

var child2 = new XElement(defaultNs + "child2");
parent.Add(child2);

var child3 = new XElement("child3");
parent.Add(child3);

次のようなXMLが生成されます。

<root xmlns:otherNs="http://www.tempuri.org/other" xmlns="http://www.tempuri.org/default">
    <otherNs:parent>
        <otherNs:child1 />
        <child2 />
        <child3 xmlns="" />
    </otherNs:parent>
</root>

child1child2child3の違いを見てください。 child2は、デフォルトの名前空間を使用して作成されます。これはおそらく必要な名前ですが、child3は現在の名前空間です。

77