我正在寫一個接受來自我們客戶的XML的軟件。 的XML HAS2部分,標準的一部分,它包含的字段集,以及自由一部分,使我們的客戶能夠添加自己的自己的XML在vb.net中添加XML命名空間參考
<OverallDocument>
<SetFields>
<name>Jon Doe</name>
<age>24</age>
<sex>M</sex>
</SetFields>
<FreeXML>
<!--custom xml goes here-->
</FreeXML>
</OverallDocument>
,系統默認設置,以便OverallDocument具有覆蓋所有部門架構除了FreeXML標籤內部的內容之外。 FreeXML標籤的內容由我們的客戶發送給我們自己的模式。
<OverallDocument>
<SetFields>
<name>Jane Doe</name>
<age>30</age>
<sex>F</sex>
</SetFields>
<FreeXML>
<Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</Custom1>
</FreeXML>
</OverallDocument>
在這種情況下,客戶端的XML看起來像這樣
<Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</Custom1>
該計劃試圖提取作進一步處理客戶的自定義XML。
到目前爲止,沒有問題。這一切很好地讀入一個xmldocument。 不幸的是,我們的一些客戶在自定義xml中使用名稱空間前綴,而沒有在xml文檔中聲明前綴。
<OverallDocument>
<SetFields>
<name>Jane Doe</name>
<age>30</age>
<sex>F</sex>
</SetFields>
<FreeXML>
<hl:Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</hl:Custom1>
</FreeXML>
</OverallDocument>
這會導致xmldocument崩潰,因爲前綴未在xml中聲明。我嘗試通過從代碼中刪除所有名稱空間前綴來解決此問題,但由於客戶端的模式需要前綴位於標記中,因此這會在處理中稍後導致問題。
一些進一步的問題
- 我們有不同的 模式和不同的命名空間的許多客戶。
- 每個XML文件可以在不同的 部分多 FreeXML元素(所以它不可能 作爲 不同客戶在整個文檔中的不同位置 使用1或更多, 使用部分簡單的提取FreeXML部分。
- 我們不能修改客戶端的架構。
- 我們不能告訴客戶進行排序 他們的行爲,並編寫使用XML。
理想情況下,如果我們只需指定xmldocument閱讀器的名稱空間和前綴,那將是最好的。 如
dim xdoc as xmldocument = xmldocument
'add namespace and prefix
xdoc.loadxml(xmlcode)