【问题标题】:Converting XSLT 1.0 to XSLT 2.0将 XSLT 1.0 转换为 XSLT 2.0
【发布时间】:2009-07-02 03:41:47
【问题描述】:

我正在使用 XSLT 1.0 来转换 XML 文件。它适用于 IE 6.0Firefox 3.0.11。但是,PHP 5.2.6 XSLTProcessor(提供 XSLT 1.0)和 Qt C++ QXmlQuery(仅提供 XSLT 2.0)生成空白输出。

我想到了两个选择:

  1. 将其转换为 XSLT 2.0(首选)
  2. 提取 Firefox 部分进行解析。

W3C 规范似乎让我很想消化,而要转换的文档也没有那么大。

【问题讨论】:

  • 您将标题编辑为“... [已关闭]”而不是实际关闭问题?!这不是它应该如何工作的。如果您必须关闭问题,请查找“关闭”链接。

标签: php xml qt xslt


【解决方案1】:

XSLT 应该是相当向后兼容的,虽然很明显你可以在 XSLT 2.0 中使用一些东西来让生活变得更轻松。

听起来您的 XSLT 有问题,但由于您没有提供任何东西供我们查看,所以很难说。

我建议您使用 Kernow-for-Saxon - 它是测试 XSLT 的绝佳 UI(比尝试使用 Firefox 或 IE 好得多),如果您的 XSLT 有错误,那么 Saxon 是更好的 XSLT 之一处理器提供良好的错误以尝试找出原因。

http://kernowforsaxon.sourceforge.net/

我对 PHP 或 Qt 处理器一无所知,但其中可能存在无法正确处理 XSLT 的错误。

【讨论】:

  • 嗨 samjudson,我将在今天晚些时候上传 XML 和 XSLT 文件,以便您检查。谢谢!
【解决方案2】:

如果整个规范太长 (???),请从 Changes 部分开始。

此外,XSLTProcessor 只是 libxslt 的一个包装器,不太可能在有效的 XSLT 1.0 转换中中断。我想知道您的转换是否有一些奇怪的地方可以在不转到 2.0 的情况下修复,或者您的 XSLTProcessor 部署是否有问题。您能否成功应用其他转换?

【讨论】:

  • 感谢您的回复。我在匹配标签中使用 XPath。我尝试使用 IE 和 Firefox,它们可以工作,但正如我提到的,它们不能与其他工具一起工作。我正在尝试使用 W3School 工具进行调整。到目前为止它不起作用。
  • @Viet:我的猜测也是你做错了什么。除了 XSLT 2.0 处理器可以很好地执行 1.0 代码这一事实之外,我认为您最好花时间查找错误,而不是阅读 XSLT 2.0 规范。
  • 我发现 Tidy 未将 HTML 转换为严格的 XML,因此我列出的 XSLT 解析器不提供输出。我改用 Mozilla nsIXSLTProcessor。 HTML 输入不受我控制,因此我无能为力。还是谢谢。
  • @Viet:tidy 中有一个选项使其输出格式正确的 XML。
  • 哪一个?我需要格式严格的 XML。谢谢。
【解决方案3】:

经过大量的努力和痛苦的测试,我自己找到了答案:

  1. 有效的 XSLT 1.0 文件也是有效的 XSLT 1.0 文件
  2. PHP 和 Qt C++ 失败,因为我有 <html xslmn="..."> 而不仅仅是 <html>(IE 和 FF 能够成功转换)。为简单起见,我删除了<html> 标签的<!DOCTYPE<attributes

感谢大家参与讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多