0

我有一个像这样加载的“普通” XmlDocument :

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

并希望在加载对象模型时使用命名空间来限定元素

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

在写出来之前。

4

2 回答 2

0

不幸的是,您不能只更改节点的命名空间。这些属性是只读的。

您将无法通过递归或使用 XSLT 创建新文档。

于 2010-03-24T04:00:41.603 回答
0

一个肮脏的技巧是,如果您正在从存储/字符串读取 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");
    }
}

任务完成。

于 2010-03-24T06:25:26.137 回答