2010-03-24 152 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"); 
    } 
} 

工作完成。