【问题标题】:Converting XML between schemas - XSLT or Objects?在模式之间转换 XML - XSLT 还是对象?
【发布时间】:2009-02-13 13:12:01
【问题描述】:

给定:

  • 两个相似且复杂的架构,我们称它们为 XmlA 和 XmlB。
  • 我们想从 XmlA 转换为 XmlB
  • 并非生成 XmlB 所需的所有信息都包含在 XmlA 中(需要进行数据库查找)

鉴于我需要引用数据库中的其他数据,我可以为此使用 XSLT 吗?如果是这样,支持使用 XSLT 而不是普通的旧对象映射和转换的论点是什么?我认为以下标准可能会影响此决定:

  • 性能/速度
  • 内存使用情况
  • 代码重用/复杂性

该项目将基于 C#。

谢谢。

【问题讨论】:

    标签: c# xml xslt


    【解决方案1】:

    使用 C#,您始终可以为 XSLT 转换提供扩展对象,所以这不是问题。

    如果没有可用的模式和 XML,很难定性地说,但我想编译的转换会比对象映射更快,因为您必须进行大量的轮子重新发明。

    此外,XSLT 的巨大优势之一是它的可维护性和可移植性。如果您正在监视文件,您将能够通过模式更改快速调整 XSLT 文档,并且无需进行任何重建和删除。

    根据您提供给我们的信息,可以选择任何一种方式。

    【讨论】:

    • +1 来自我——似乎没什么可补充的,至少对于 XSLT 1.0 而言。可以在答案中描述 XSLT 2.0 Schema-Aware 处理器的可能性,但目前与 .NET 结合使用可能看起来有点异国情调。不过,这将是理想的。
    【解决方案2】:

    我的问题是转换集发生变化的可能性有多大?

    如果它们不会有太大变化,我倾向于在一个源代码中完成所有这些——这里是 C#。我会使用 XSD.exe(.NET XSD 工具)生成的序列化类以及数据层来处理这类事情。

    另一方面,如果转换集可能会改变——或者可能需要在安装后“更正”——那么我倾向于将 XSLT 和 C# 扩展组合到 XSLT。 Extension 机制简单明了,如果使用 XslCompiledTransform 类型,性能相当不错。

    【讨论】:

      【解决方案3】:

      如果数据不在 xml 中,那么 xslt 会很麻烦。您可以使用xsl:document() 提供其他文档,或者您可以使用xslt 扩展方法(但供应商之间不太支持)。因此,除非您对 xslt 很执着,否则在这种情况下它听起来不是一个好选择(尽管如果使用得当,我是 xslt 的忠实粉丝)。

      所以:如果可能的话,我可能会使用常规的命令式代码 - 流式传输 (IEnumerable<T>)。当然,除非您有大量数据,否则这些细微差别是没有实际意义的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 2016-12-23
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多