子要素を持つ XElement があり、親から子要素を削除して、2 つの間のすべての参照を削除すると、子 XElement は親と同じ名前空間を持ちますか?
つまり、次の XML があるとします。
<parent xmlns:foo="abc">
<foo:child />
</parent>
子要素を削除すると、子要素のxmlは次のようになります
<child xmlns="abc" />
または好き
<child />
子要素を持つ XElement があり、親から子要素を削除して、2 つの間のすべての参照を削除すると、子 XElement は親と同じ名前空間を持ちますか?
つまり、次の XML があるとします。
<parent xmlns:foo="abc">
<foo:child />
</parent>
子要素を削除すると、子要素のxmlは次のようになります
<child xmlns="abc" />
または好き
<child />
答えはイエスです。名前空間は子に伝播します。
子要素内で名前空間を指定する必要はありません。名前空間のスコープには、それが定義された要素の終了タグまでのすべての要素が含まれます。
ここのセクション #6.1 を参照してください http://www.w3.org/TR/REC-xml-names/#scoping
それが役立つことを願っています
上記の要素を新しい xml ツリーに含めると、同じ名前空間になります。
var xml1 = XElement.Parse("<a xmlns:foo=\"abc\"><foo:b></foo:b></a>");
var xml2 = XElement.Parse("<a xmlns:boo=\"efg\"></a>");
XNamespace ns = "abc";
var elem = xml1.Element(ns + "b");
elem.Remove();
xml2.Add(elem);
Console.WriteLine(xml1.ToString());
Console.WriteLine(xml2.ToString());
結果:
<a xmlns:foo="abc" />
<a xmlns:boo="efg">
<b xmlns="abc"></b>
</a>