如何将外部数据添加到XML?

时间:2009-01-12 18:07:56

标签: xml xml-serialization xsd

我有一个XML Schema和一个对该架构有效的XML实例。

此XML实例包含一些数据。

我想用更多数据扩展XML实例(我自己的XML元素中每个XML元素的元数据),同时保持它对提供的模式有效。

真正的用例是我拥有自己的控件,通过XML获取数据,我想生成一个新的XML,以某种方式保存与控件序列化相关的其他元数据。

我的几个解决方案是保留另一个文档,其中包含“XPath,Mode,Color”列表 我在加载XML后加载第二遍。

另一种解决方案是将id添加到XML节点,这样就可以引用另一个文档中的节点(而不是使用XPath)。

另一个想法是以某种方式将属性(在每个元素的命名空间中)添加到数据XML实例,但问题是我在以后尝试再次加载时使用新属性验证XML时可能会遇到问题。 (因为我添加到XML的属性没有在他的模式中定义)

你有更好的解决方案吗?您将投票选择哪种解决方案? (请解释。)

谢谢!

1 个答案:

答案 0 :(得分:1)

从您的问题中不清楚是否生成了一次额外的元数据,或者是否需要在次级负载中存储和使用这些元数据。

您可以考虑使用XSLT将新XML与元数据一起使用。如果新数据直接失败并从原始XML中推断出来,则可以使用XSLT轻松生成每个节点的元数据。如果它是可预测且一致的,那么只要加载数据并获得相同的新XML,就可以重复该过程。如果它不可预测,例如,如果您需要动态创建XSLT,您仍然可以在生成XSL后存储它,然后随着时间的推移使用它从原始XML重新生成相同的新XML。

根据您建议的解决方案:

  1. 通过XPATH推荐:如果原始XML没有改变并且您可以构建确定的XPATH,那就太好了。
  2. 按节点ID引用:很好,但如果您还没有,则需要将id添加到原始XML中,如果原始更改,则需要更新ID(因此您可能需要id计数器)分配ID,或以其他方式使用生成的GUID作为ID。
  3. 如果要将元数据添加到原始XML,可以更新架构或为“更新的文档”创建新架构(并更改XML文档中的架构引用)。
  4. 此致 因巴尔