如果我有一個具有子元素的XElement,並且如果我從父元素中移除一個子元素,刪除這兩者之間的所有引用,那麼子XElement是否與父元素具有相同的名稱空間?名稱空間是否傳播給XElement對象中的子項?
換句話說,如果我有下面的XML:
<parent xmlns:foo="abc">
<foo:child />
</parent>
和我刪除了子元素,將子元素的XML看起來像
<child xmlns="abc" />
或類似
<child />
如果我有一個具有子元素的XElement,並且如果我從父元素中移除一個子元素,刪除這兩者之間的所有引用,那麼子XElement是否與父元素具有相同的名稱空間?名稱空間是否傳播給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>