基于XSD更改的动态XSLT生成

时间:2017-08-01 07:58:13

标签: c# xml winforms xslt xsd

最初我对每个 XSD 都有各种 XSD 定义。我已经存储了一组XML文件。

经过一段时间后, XSD 定义会有一些变化,因此我存储的XML不再需要再次验证 XSD

要获得支持,我需要编写 XSLT 并对存储的XML进行更改,以再次验证新的 XSD

现在,在每次 XSD 更改的情况下,我需要手动编写 XSLT ,如何动态生成 XSLT

目前,我可以比较旧的和新的 XSD ,并使用 Microsoft.XmlDiffPatch DLL获取更改内容。

根据这些变化,我需要使用C#生成 XSLT

2 个答案:

答案 0 :(得分:0)

我不知道你的问题是什么,但我认为这在技术上是可行的。

可能更容易编写一些读取Xml的c#代码然后对其进行扩充并将其设置回文件/ database / dataStore。

答案 1 :(得分:0)

不确定对此是否有魔咒。听起来好像您正在从事一些工作,我建议您在面对将来的变化时,无论做什么工作都应尽可能地重用。

您可能要考虑使用 xproc (通过Calabash或其他引擎)来创建XML管道,从而检测XSD的更改并将其传递到XSL中(也许要遵守每个XSD一个XSL,以保持您的理智),然后说XSL接受这些更改,并为当前正在处理更改的XSD绑定的所有XML文件处理这些更改。将所有这些分解为管道内的子转换都是可能的,并且可能使事情在将来更可重用。

您可能希望在XSL内执行以下操作:

  • 要进行的所有更改
      每个XML的
      • 匹配/添加/删除每个元素和/或属性以实现更改

表示要以某种标准格式进行的更改的一种方法是作为要执行的操作和要执行的操作相关元素/属性的传入列表(可以将其设置为键/值对)。每个操作可以是字符串(添加,删除,转换)或数字代码。然后,您遍历操作列表和相关元素并触发匹配项。

这有点抽象,因为我不知道您需要进行的更改的范围或深度。我真的只是在这里大声思考。您可能只需要操劳做些认真的一次性工作,然后实施某种变更控制流程,以确保将来不会失控。

希望这会有所帮助。祝你好运!