【问题标题】:C# versus XSLT for transforming XML data to html file [closed]用于将 XML 数据转换为 html 文件的 C# 与 XSLT [关闭]
【发布时间】:2023-04-03 23:45:02
【问题描述】:

我正在开发一个生成 HTML 的项目。以下是步骤。

  1. 读取 XML 文件,然后用一些数据更新 XML 文件
  2. 生成最终的 XML
  3. 使用 XSLT 将这个最终的 XML 转换为 HTML 文件 - XML 的大小很大,转换后的 HTML 文件将有 10 多个可打印页面(这只是为了向您展示单个 html 文件有多大)。此外,该解决方案还必须转换 4000 多个不同的 XML 文件。随着不同产品的 HTML 视图条件越来越大,使用 XSLT 条件语句和模板变得难以满足。抽象出常见的内容并区分不同的 HTML 视图并不是那么灵活。我正在考虑使用 C# 而不是 XSLT 进行转换。但是将所有 XSLT 作业实现到 C# 类将是一项艰巨的任务,所以我想知道使用 C# 来完成它是否令人信​​服。或者如果它对我来说是一个更好的选择。

您对此有什么建议吗?请让我知道您的想法:如果我更好地清理 xslt 并继续使用它,或者我应该使用新的 C# 实现。 谢谢

【问题讨论】:

    标签: c# html xml xslt


    【解决方案1】:

    听起来该项目以一些意想不到的方式发展,您可能会通过重新编写得到很好的服务。项目的下一个版本会更好,因为您对项目有更多的了解,以及根据您的经验它是如何变化的。

    使用“最佳”技术重新编写它,其中“最佳”由您的开发团队知道的“最佳”定义。该解决方案在 C# 或 XSLT 中同样干净。

    一个 10 页的 HTML 文档并不是很大,也不是 4,000 个,XSLT 就可以了。确保您没有调用太多模板(即模板堆栈不是太深 - 超过 4 或 5 层很深),并且您正在使用 s 来消除多次查找通过源 XML 来加快速度。

    【讨论】:

    • 当您说深度时,如果您的意思是 1 调用 2 然后 2 调用 3 然后 3 调用 4 等等?这可能不是很多,但可能有一些案例(我必须调查)。但我确信一个 XML 文件会应用很多模板。
    • 模板堆栈深度仅适用于程序调用模板,而程序调用模板通常不是组织 XSLT 代码的最佳方式。
    • 谢谢,我认为这可能是我应该研究的事情之一。因为现在,将有 30 多个模板应用于单个 XML 文件(其中大多数是模板匹配,因此我们不具体调用每个模板),但在某些情况下,我们按名称或基于 xml 中的某些值应用模板。在这种情况下,我们根据 html 上的显示顺序应用模板。
    • kjhughes 说得很好。
    • 确保您使用变量(在我的帖子中拼写错误)来消除通过源进行的多次查找。
    【解决方案2】:

    XSLT 可以非常简洁明了...但是如果您希望它表现出色,尤其是在您所说的范围内,则需要保持它的简洁。另一方面,我已经将大型 XML 文件导入到集合中,它的工作效率相当高。它真的是个人喜好。考虑到您正在生成 HTML 作为最终结果......我可能会坚持使用 XSLT。 注意:许多开发人员不像其他数据传输语言那样熟悉 XSLT...如果其他人经常使用 XSLT,您可能需要考虑这一点

    【讨论】:

      【解决方案3】:

      XSLT 非常适合将 XML 转换为 HTML 或其他 XML。您提出的所有问题都不是真正的障碍;每个都有大多数 XSLT 开发人员都熟知的简单解决方案:

      • 你没有提到具体的性能要求,但有几十个 可打印的页面和数以千计的 XML 输入文件对于 XSLT 项目。
      • XSLT 模板的条件扩展没有问题。更多的 特定模板优先,谓词语言如此 丰富且经过良好调整的 XML 复杂的条件处理是 实际上是编写良好的 XSLT 程序的优势,而不是劣势。
      • 常用模板可以从 XSLT 文件中分解出来,并且 在易于导入或包含的文件中单独维护 在需要的地方。
      • 更精细的转换可以利用多次传递或分阶段 模板的应用(但我还没有听到你的任何需求 需要这样的技术)。

      我强烈建议您在 XML 转换项目中坚持使用 XSLT。 您可能有一些单独提出的 Stack Overflow 问题的基础,但您对此一无所知。写完是改用另一种语言的理由。

      【讨论】:

      • 谢谢,我担心实际上xslt内部条件的复杂性正在增长。大约 30 个或更多模板(其中大部分模板匹配)将应用于来自不同 XSL 文件的单个 XML。尽管随着时间的推移,xslt 的大小也在不断增长。这是因为大部分的html展示会根据不同的需求有不同的呈现方式。因此,管理所有条件和模板开始让我感到沮丧。
      • 为了更好地处理您描述的复杂性,通常倾向于将条件放置在模板模式中(例如xsl:template/@match),而不是模板中的语句(例如xsl:if/@testxsl:when/@test)。力求以声明式而非程序式组织您的代码。
      • 谢谢kjhughes。我会采纳你的建议。再次感谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2021-08-12
      • 1970-01-01
      • 2014-03-08
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多