2009-01-12 27 views
1

我有一個XML Schema和一個對該模式有效的XML實例。如何將外部數據添加到XML?

該XML實例包含一些數據。

我想用更多的數據(我自己的元數據XML實例中的每個XML元素)擴展XML實例,同時保持它對提供的模式有效。

真正的用例是我有我自己的控件,通過XML獲取其數據,我想生成一個新的XML,以某種方式保存與控件序列化相關的附加元數據。

我的一些解決方案是保存另一個文檔,其中包含加載XML後第二次加載的「XPath,Mode,Color」列表 。

另一種解決方案是將id添加到XML節點,並以這種方式引用另一個文檔中的節點(而不是使用XPath)。

另一個想法是以某種方式向數據XML實例中添加屬性(位於每個元素的名稱空間中),但問題在於,稍後嘗試加載時可能會遇到使用新屬性驗證XML的問題再次。 (因爲我添加到XML中的屬性沒有在他的模式中定義)

你對此問題有更好的解決方案嗎?你會投票的哪個解決方案? (請說明。)

謝謝!

回答

1

從您的問題中不清楚額外的元數據是否生成過一次,或者需要在後續負載中存儲和使用。

您可以考慮使用XSLT將元數據與新的XML一起生成。如果新數據的故障直接來源於原始XML,並且可以使用XSLT輕鬆地爲每個節點生成元數據。如果它是可預測且一致的,那麼只要您加載數據並獲得相同的新XML,就可以重複該過程。例如,如果它不可預測,例如,如果您需要即時創建XSLT,則可能仍然能夠在生成XSL後將其存儲,然後使用它隨時間從原始XML重新生成相同的新XML。

根據您的建議的解決方案:

  1. Referncing通過XPATH:好,如果原始的XML不會改變,你可以建立明確的XPath。
  2. 通過節點ID引用:好,但是如果你還沒有,你需要將id添加到原始XML中,並且如果原始更改需要更新ID(所以你可能需要一個id計數器分配ID,或以其他方式使用生成的GUID作爲ID)。
  3. 如果要將元數據添加到原始XML中,可以更新模式或爲「更新的文檔」創建一個新文檔(並更改XML文檔中的模式引用)。

問候, 因巴爾

+0

感謝您的詳細響應。 關於你的問題,我需要存儲它,並在隨後的控制反序列化中使用它。 – Ran 2009-01-13 13:46:02