在带有命名空间的加载对象模型前缀XmlDocument元素中

时间:2010-03-24 03:24:04

标签: c# xml .net-2.0 xmldocument object-model

我有一个“普通”XmlDocument加载如下:

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

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

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

在写出来之前。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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 :)

e.g。

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");
    }
}

完成工作。