【问题标题】:Application To Help Translate XSL Transformations帮助翻译 XSL 转换的应用程序
【发布时间】:2015-02-21 23:55:49
【问题描述】:

必须存在一些应用程序来执行以下操作,但我什至不知道如何用谷歌搜索它。

难题在于我们必须回溯缺陷,这样做需要查看输出 xml 中的某些字段是如何由 XSL 生成的。困难的部分是在 XSL 和 XML 中花费数小时试图找出它是在哪里生成的。如果您正在处理多个 XSL 转换和编辑,即使调试也很困难,因为您仍然需要找出在该转换的特定场景中获得的主键。

是否有一些软件程序可以采用 XSL 并可能执行以下两种操作之一:

  1. 给它一个输出字段名称,它会生成一个列表 生成此字段的可能条件,以便您确定 XSL 中的十几个符合您的条件的条件,
  2. 以某种方式将 xsl 转换为更易读的 if/then 类型 格式(有点像如何使用 Javadoc 生成可读文档)

【问题讨论】:

  • 问题似乎是开发人员不熟悉 xslt;你所拥有的是一个仍在建设中的xsl,因为你仍在调试它并试图让它工作。有很多标准的xml开发工具,我可以想到氧气,xmlspy,这样的工具使开发xsls更容易,但它们不会生成xsls供您选择。我认为您正在寻找的是 xpath 表达式,因为您声明您只需要一个输出字段。 xslt 也不能​​归结为一系列 if-else。可以发布您正在尝试做的更多细节吗?
  • 嗨,每个问题 - 问题是我们必须解决正在处理的交易的异常/缺陷。第一步是找出它是由我们的系统还是发件人引起的。发件人发送一种类型的 xml,然后我们使用(大部分)xsl 文件转换为我们内部的 xml 类型。对于像我们这样大的系统,这些 xsl 非常复杂,可能需要几个小时来调试,以确定原因是来自源的错误数据还是我们的 xsl 转换它的方式。
  • 您应该使 xslt 的输出符合模式定义。
  • 谢谢,我们正在使用 XSLT 来确保这一点。在我的情况下,我们确实使用 xslt 进行模式验证。真正的问题在于获取输出 xml 值并插入数据库,然后您会遇到唯一约束的问题。此时,您必须确定这些唯一键值是如何从 xsl 生成的,以查看您是否以这种方式生成它们,或者它们是否作为这些值从源系统开始发送

标签: debugging xslt transformation


【解决方案1】:

您没有说您当前使用的是什么工具。 oXygen 和 Stylus Studio 之类的工具具有一些相当复杂的 XSLT 调试功能。 OXygen 的输出映射工具(请参阅http://www.oxygenxml.com/xml_editor/working_with_xslt_debugger.html#xsltOutputMapping)听起来很像您要求的东西。

使用模式感知样式表可以极大地简化调试。至少在 Saxon 实现中,如果您在样式表中声明您希望输出对特定模式有效,那么如果不是,Saxon 会告诉您样式表中的哪些指令导致生成无效输出。有时它会在样式表编译时向您显示错误,甚至在您提供源文档之前。在我看来,这种能力没有得到充分利用。更多细节在这里:http://www.stylusstudio.com/schema_aware.html

【讨论】:

  • 很好的建议,+1,我正在使用 Ultra Edit 版本 20.00.0.1054,它拥有的唯一功能是任何 markUP 开始标签的自动结束标签。跨度>
  • 我目前正在使用 Stylus Studio 的调试功能。让我检查一下氧气工具,看看它是什么。谢谢。
【解决方案2】:

这是一个有趣的问题。您的建议也很有趣,但开发起来会很有挑战性;我不知道任何 COTS 或 FOSS 解决方案,但这里有一些想法:

  1. 您的第一种可能性本质上是data-flow analysis 来自 编译器设计。我知道没有任何工具可以将其暴露给用户, 但是您可能会问 XSLT 处理器开发人员是否曾经 考虑以对 XSLT 有用的方式将此类分析外部化 开发人员。
  2. 您的第二种可能性本质上是文档生成器 针对 XSLT 源。我实际上帮助完成了一个客户 过去的金融服务(见Document XSLT Automatically),但解决方案是 据我所知,该客户从未公开发布。它 将有可能在之间重新创建这样的元转换 XSLT 输入和 HTML 或 Docbook 输出,但在 最一般的情况。

您可以考虑另一种方法:

收紧你的界面定义。在您的评论中,您提到不确定问题的来源是来自发件人的错误数据还是 XSLT 中的错误。更严格的接口定义将为您提供良好的服务。您可以通过更好地输入 XSD、添加 xsd:assertion 语句(如果 XSD 1.1 是一个选项)或添加基于 Schematron 的接口检查级别来实现这一点,这将允许您在输入上使用基于 XPath 的断言的全部功能。拥有这样一个经过改进且更具体的接口定义将帮助您和您的客户了解应该和不应该将哪些内容发送到您的系统中。

【讨论】:

  • 谢谢,这是有用的信息。在我的情况下,我们确实使用 xslt 进行模式验证。真正的问题在于获取输出 xml 值并插入数据库,然后您会遇到唯一约束的问题。此时,您必须确定这些唯一键值是如何从 xsl 生成的,以查看您是否以这种方式生成它们,或者它们是否作为这些值从源系统开始发送。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多