【问题标题】:Validate and revise XML: schema or code?验证和修改 XML:模式还是代码?
【发布时间】:2016-02-23 23:22:21
【问题描述】:

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

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

【问题讨论】:

    标签: xml powershell xsd xml-validation


    【解决方案1】:

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

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

    • 验证:使用标准 XML 模式语言,例如 XSD、RelaxNG 或 Schematron 来表达您的词汇和语法 XML。使用现成的验证解析器来检查您的 XML 遵循模式。不要指望任何转变 能力在这里,只是对XML是否存在问题的回答 遵守模式和诊断消息,指示在哪里 如果没有。
    • 转换:使用 XSLT 将 XML 从旧的映射到新的或更新的 XML 模式。第二种选择:使用具有可靠 XML 的过程语言 解析和最好的 XPath 支持。 PowerShell 将符合条件。

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

    【讨论】:

    • 感谢 jkhughes!正是我需要的洞察力。
    猜你喜欢
    • 2014-04-17
    • 2013-05-22
    • 1970-01-01
    • 2011-06-02
    • 2010-11-22
    • 2011-07-23
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多