验证和修改XML:架构或代码?

时间:2015-11-21 13:58:22

标签: xml powershell xsd xml-validation

我有一个使用相当广泛的基于XML的数据存储的脚本,目前我没有对XML进行真正的验证,因为XML目前也是人工编辑的,所以这已经成为一个问题。 在短期内,我想验证XML不仅仅是有效的XML,而是用于我的目的的有效数据。最后,我还想修改XML,例如将数据从属性移动到节点。在我想要允许两者之间,当我加载XML时,我可以寻找一个也可以是属性的节点,并在需要时将属性分配给新创建的节点(在内存中)。 从概念上讲,至少对于验证而言,架构显然是正确的答案。但是,似乎模式不能支持其他需求,临时将属性映射到节点,最终实际更改XML,创建节点,从属性分配值,删除属性以及保存回XML文件。 我的想法是我应该创建一个XML文件来映射所有这些。它首先定义什么是“有效”XML,然后我可以在代码中使用它来验证我的其他XML。然后我可以扩展它以将属性映射到新节点并使用它来在摄取上创建这些节点,因此我的工作代码可以使用基于节点的XML,而文件XML仍然是属性。然后我再次添加代码来修改XML文件。 所有这些都是很多工作,所以我在这里要求确保这个过程长期确实有意义。如果PowerShell或XML Schema已经提供了一个很好的方法来做到这一点而没有所有额外的代码我会讨厌自己动手。

而且,假设我自己就是答案,我很好奇一个实现细节。目前我加载XML,然后在使用点,即各种“任务”函数,我将XML读入变量,然后我修改和使用(扩展标记以创建最终文件路径等)。或者,我可以直接在内存中修改XML本身,我很好奇是否有一种性能原因使用一种方法而不是另一种方法?额外的变量意味着额外的内存使用,但它们都是函数变量,因此它们最终会被垃圾收集。总XML最多可以达到几Kbs,所以我的感觉是性能不是要关注的问题,编码的简易性,但是因为我发现没有真正好的方式来描述PowerShell性能我只是猜测

1 个答案:

答案 0 :(得分:2)

你用来描述你的计划的巨大文本墙包含了大量不必要的工作和车轮改造。

专家和新手都已经通过使用正确的工具来解决这些问题:

  • 验证:使用标准的XML架构语言(如XSD,RelaxNG或Schematron)来表达您的词汇和语法 XML。使用现成的验证解析器来检查您的 XML遵循架构。不要指望任何转变 这里的功能,只是回答XML是否存在的问题 遵守指示位置的架构和诊断消息 当它没有。
  • 转换:使用XSLT将XML从旧映射到新映射或更新的XML架构。第二种选择:使用具有可靠XML的过程语言 解析并优选XPath支持。 PowerShell符合资格。

最后,忘记表现。您必须非常努力地使用标准工具来解决“几Kbs”XML数据的性能问题。专注于代码和程序员生产力的表现力/清晰度;使用既定的工具和标准将有很大帮助。