Распространяются ли пространства имен на дочерние объекты в объектах XElement? - PullRequest
2 голосов
/ 05 сентября 2008

Если у меня есть XElement, имеющий дочерние элементы, и если я удаляю дочерний элемент из родительского элемента, удаляя все ссылки между ними, будет ли дочерний XElement иметь те же пространства имен, что и родительский?

Другими словами, если у меня есть следующий XML:

<parent xmlns:foo="abc">
    <foo:child />
</parent>

и я удаляю дочерний элемент, xml дочернего элемента будет выглядеть как

<child xmlns="abc" />

или как

<child />

Ответы [ 2 ]

1 голос
/ 06 сентября 2008

Если вы включите упомянутый элемент в новое дерево 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>
1 голос
/ 06 сентября 2008

Ответ - да, пространства имен распространяются на детей.

Вам НЕ нужно указывать пространство имен в дочерних элементах. Область видимости пространства имен включает все элементы до закрывающего тега элемента, в котором он определен.

См. Раздел # 6.1 здесь http://www.w3.org/TR/REC-xml-names/#scoping

надеюсь, что поможет

...