2010-03-24 150 views
0

加载的对象型号前缀的XmlDocument元素我有一个“普通” XmlDocument加载像这样:在命名空间

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

,想要出线,象这样的命名空间中的元素,而对象模型加载

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

写出来之前。

+0

仅供参考:在您的示例中,请注意root不在新的名称空间中。你需要用abc作为前缀。 – 2010-03-24 03:53:41

+0

@John S.谢谢。在示例中将名称空间修复添加到根元素。 – 2010-03-24 03:57:26

回答

0

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

您将被卡住,通过递归或使用XSLT创建新文档。

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

工作完成。