В загруженной объектной модели префикс элементов XmlDocument с пространством имен - PullRequest
0 голосов
/ 24 марта 2010

У меня есть «обычный» XmlDocument , загруженный так:

<root>
    <element1 />
    <element2></element2>
</root>

и хотите квалифицировать элементы с пространствами имен примерно так, пока объектная модель загружена

<abc:root xmlns:abc="urn:something">
    <abc:element1 />
    <abc:element2></abc:element2>
</abc:root>

перед записью.

Ответы [ 2 ]

0 голосов
/ 24 марта 2010

Одна хитрость в том, что если вы читаете XML из хранилища / строки, вы можете расширить XmlTextReader, чтобы изменить пространство имен загруженного документа (хотя я не знаю, будет ли это полезно, поскольку вы, похоже, подразумеваете, что у вас уже есть загруженный документ, который, по общему признанию, должен был прийти откуда-то).

Так, например:

class MyXmlReader : XmlTextReader
{
    public MyXmlReader(TextReader r) : base(r)
    {
    }

    public override string Prefix
    {
        get
        {
            return "abc";
        }
    }

    public override string NamespaceURI
    {
        get
        {
            return "urn:something";
        }
    }
}

Тогда вы можете использовать его как XmlReader r = new MyXmlReader(new StringReader("<root/>")); или аналогичный.

- = РЕДАКТИРОВАТЬ = -

Теперь я думаю, что есть гораздо более очевидный способ, вместо этого переопределить XmlWriter :)

, например

class MyXmlWriter : XmlTextWriter
{
    public MyXmlWriter(TextWriter w)
        : base(w)
    {
    }

    public override void WriteStartElement(string prefix, string localName, string ns)
    {
        base.WriteStartElement("abc", localName, "urn-something");
    }
}

Работа выполнена.

0 голосов
/ 24 марта 2010

К сожалению, вы не можете просто изменить пространство имен для узла. Эти свойства доступны только для чтения.

Вы застрянете при создании нового документа с помощью рекурсии или с помощью XSLT.

...