用于将 XML 数据转换为 html 文件的 C# 与 XSLT [关闭]

Posted

技术标签:

【中文标题】用于将 XML 数据转换为 html 文件的 C# 与 XSLT [关闭]【英文标题】:C# versus XSLT for transforming XML data to html file [closed] 【发布时间】:2014-01-20 08:54:45 【问题描述】:

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

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

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

【问题讨论】:

【参考方案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。我会采纳你的建议。再次感谢

以上是关于用于将 XML 数据转换为 html 文件的 C# 与 XSLT [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将 XML 转换为 C# 类的工具 [重复]

使用嵌套列表将 XML 文件转换为 C# 对象

如何将 XML/JSON 文件转换为 C# 类?

将 XML 数据转换为 C# 类

将 C++ 结构转换为 C# 以用于 UDP 通信

将日志文件转换为 XML 和(XHTML,建议