Распространяются ли пространства имен на дочерние объекты в объектах 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>