名称空间会传播到XElement对象中的子级吗?
时间:2020-03-05 18:48:26 来源:igfitidea点击:
如果我有一个带有子元素的XElement,并且如果我从父元素中删除了子元素,同时删除了两者之间的所有引用,那么子XElement是否具有与父元素相同的命名空间?
换句话说,如果我具有以下XML:
<parent xmlns:foo="abc"> <foo:child /> </parent>
我删除了子元素,子元素的xml看起来像
<child xmlns="abc" />
或者喜欢
<child />
解决方案
回答
答案是肯定的,名称空间确实会传播到子级。
我们不必在子元素中指定名称空间。命名空间的作用域包括所有元素,直到定义该元素的元素的结束标记为止。
请参阅http://www.w3.org/TR/REC-xml-names/#scoping此处的#6.1节
希望能有所帮助
回答
如果在新的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>