2009-01-20 125 views
1

我使用的是VB 2008,我試圖將xmlns =「mynamespace」屬性添加到XDocument的根元素。將XML名稱空間屬性添加到第三方XML?

XML文檔是由第三方創建的,我已將它加載到VB XDocument對象中。事實上,它沒有命名空間。我一直在研究本地副本,並在文本編輯器中添加到命名空間中,以便我可以使用VB中的XMLToSchema來啓用智能感知等,如Beth Massi vids中的說明MSDN。現在剩下的代碼工作了,我想再次打開活動文檔。沒有名稱空間,我的XML文字不能解析。

我已經嘗試使用幾種方法將XMLNS屬性添加到根標記中,並且最近我得到了以下三個代碼示例。

Dim myNS As XNamespace = "urn:nbf:namespacename" 
myXML.Element("nameofrootelement").Add(myNS) 

^^^^命名空間作爲根元素的值添加,而不是作爲屬性添加。

XML.Root.Add(New XAttribute("xmlns", "name")) 

^^^^生成的錯誤:運行時拋出異常信息:System.Xml.XmlException - 前綴「」一樣開始元素標記中「無法從被重新定義」到「名」。

XML.Root.Add(New XAttribute("test", "name")) 

^^^^正常工作。據推測,它不喜歡我手動嘗試設置保留屬性?從我做的一些Google搜索中,這個命名空間似乎太複雜了。

我該如何解決這個問題? :D

謝謝!


更新

感謝安東尼。

我想我需要更好地理解命名空間。

我以爲。那麼吧,然後修改。 Parse它也是,但我想要一個更好的解決方案,以便它能幫助我更好地理解它!儘管我確實嘗試了這一點,正如您正確指出的那樣,它也會影響所有後代,因此它仍然會中斷。

我將使用所有由不同第三方生成的多個XML源,我認爲爲了簡單起見,我將完全忽略命名空間!

我自己的自定義分析功能會將第三方源重寫爲一個統一文檔,然後由另一個例程處理。我將能夠將ns添加到XML的中間部分,這將有助於對輔助函數進行編碼。

謝謝!

回答

2

您需要了解任何標記的真實全名是標記名,如XML(稱爲本地名稱)和名稱空間中所示。通過嘗試將xmlns =「xxx」放置到元素上,您有效地試圖重命名enmasse該元素及其所有未明確分配其自己名稱空間的後代。

正如標記名只在元素上只讀,該元素的名稱空間是隻讀的。

也許最簡單的解決方案(假設您無法讓第三方在第一個位置正確生成XML)將在解析之前將xmlns注入到文本中。