1

我有一个 XML 模式和一个对该模式有效的 XML 实例。

此 XML 实例包含一些数据。

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

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

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

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

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

你对这个问题有更好的解决方案吗?您会投票支持哪些解决方案?(请解释。)

谢谢!

4

1 回答 1

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 文档中的模式引用)。

问候, 因巴尔

于 2009-01-12T19:40:36.490 回答