Re[5]: Re: Непонятная проблема с XmlDocument
От: just_dmitry Россия www.parsec-club.ru
Дата: 21.07.04 07:38
Оценка:
ВГ>в этом то и проблема — options имеет пустой неймспейс. ладно, положим, я его не указал явно (хотя в таком случае атрибут xmlns просто не применяется к элементу), но почему и p1, и options НЕ НАСЛЕДУЮТ родительские неймспесы, а ведут себя, как им заблогарассудится?

Влезаем в System.Xml:

public XmlElement CreateElement(string name) {
    string local0;
    string local1;

    local0 = String.Empty;
    local1 = String.Empty;
    XmlNode.SplitName(name, local0, local1);
    return this.CreateElement(local0, local1, String.Empty);
}


public XmlElement CreateElement(string qualifiedName, string namespaceURI) {
    string local0;
    string local1;

    local0 = String.Empty;
    local1 = String.Empty;
    XmlNode.SplitName(qualifiedName, local0, local1);
    return this.CreateElement(local0, local1, namespaceURI);
}


public virtual XmlElement CreateElement(string prefix, string localName, string namespaceURI) {
    XmlElement local0;

    local0 = new XmlElement(this.GetXmlName(prefix, localName, namespaceURI), 1, this);
    if (!(this.IsLoading))
        this.AddDefaultAttributes(local0);
    return local0;
}


Все создаваемые излы имеют определенный неймспейс. Для OPTION и P испоьлзуется пустая строка, т.к. явно не указано иное.
То что получается в результате OuterXML, собирается на лету. При выводе каждого дочернего проверяется его неймспейс. Не совпадает с родителем — указывается. Совпадает — не указывается (по спецификации как я помню можно указывать неймспейс для всех узлов, и это не будет ошибкой).
Т.о. неймспейс OPTION <> неймспейс ROOT, вот он и указывается. Неймспейс Р = неймспейс OPTION, он указывается.

Ведь ты дже сначала создаешь элемент, потом его кому-то добавляешь. Соответственно на этапе создания никто не догадается в какого родителя ты его потом положишь и какой неймспейс присвоить этой ветви. А впоследствии при добавлении никто и не будет менять неймспейс, это уже совсем бред получится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.