命名空间是否会传播到 XElement 对象中的子对象?
-
09-06-2019 - |
题
如果我有一个包含子元素的 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>
不隶属于 StackOverflow