2009-07-11 65 views
1

問題描述:讀取xml文件,遍歷特定節點(元素),如果沒有特定的名稱空間聲明,則添加必需的名稱空間聲明,並寫出文件。MSXML DOM:將名稱空間聲明添加到樹中的現有節點

我需要使用Microsoft的MSXML DOM API在C++中執行此操作。根據此msdn reference,IXMLDOMNode COM對象上的namespaceURI屬性是隻讀的。欣賞任何解決方法。

編輯:我花了相當長的一段時間上的解決方法:創建一個命名空間,我需要在同一文件中一個新的同級節點,然後在原節點的所有子元素移動到這個新的節點,然後刪除原始節點。好吧,這不起作用,因爲子節點將保留他們以前的任何默認名稱空間。

然後,這個簡單的想法打我,它的工作原理,但我不知道它是否會咬我以後:只需在元素上創建一個「xmlns」屬性,給它所需的命名空間值!任何意見?

+0

你的意思是你想添加一個默認的名稱空間到一個應該有一個分配的元素?例如的xmlns = 「someuri」 – AnthonyWJones 2009-07-11 20:55:41

回答

1

猜測你的意思是將一個默認命名空間添加到一個元素中,它首先要明白這不是嚴格可行的。元素名稱所屬的名稱空間形成完全限定名稱,因此「添加」默認名稱空間等同於重命名該元素。 DOM中沒有內置的機制來重命名元素。

最嚴格的方法是將XML處理爲輸入到生成已更正的XML輸出的轉換(通過代碼或通過XSLT)的輸入。

然而,實用的解決方案是使用像RegEx這樣的字符串處理來查找元素並注入xmlns屬性。我個人更喜歡前者。

相關問題