2008-09-05 1 views
2

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

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

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

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

<child xmlns="abc" /> 

или как

<child /> 

ответ

1

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

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

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

надежда, что помогает

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> 
Смежные вопросы