2009-07-02 208 views
1

我有一个XSLT 1.0文件来使用XSLT 1.0转换XML文件。它适用于IE 6.0,Firefox 3.0.11。但是,PHP 5.2.6 XSL XSLTProcessor(提供XSLT 1.0)和Qt C++ QXmlQuery(仅提供XSLT 2.0)给出了空白输出。将XSLT 1.0转换为XSLT 2.0

我想有2种方法:

  1. 将其转为XSLT 2.0(首选)

  2. 提取火狐部分进行解析。

对于我来说W3C规范似乎要消化很长,要转换的文档并不是那么大。

+2

您将您的标题编辑为“... [关闭]”,而不是实际*关闭*问题?!这不是它应该如何工作。如果您必须关闭该问题,请查找“关闭”链接。 – Tomalak 2009-07-02 09:37:05

回答

2

XSLT应该几乎是向后兼容的,尽管显然有一些东西可以在XSLT 2.0中使用,使生活变得更加简单。

这听起来像您在XSLT中出现了问题,但由于您没有提供任何内容来帮助我们查看,所以很难说。

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

http://kernowforsaxon.sourceforge.net/

我不知道任何的PHP或Qt的处理器什么,但有可能有在他们的错误,没有正确处理您的XSLT。

1

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

另外,XSLTProcessor只是libxslt的一个包装,并且不会在有效的XSLT 1.0转换中断开。我想知道是否有一些关于您的转换的东西,您可以在不转到2.0的情况下修复,或者您的XSLTProcessor部署有问题。你能否成功应用其他转换?

+0

谢谢你的回复。我在匹配标签中使用XPath。我尝试过使用IE和Firefox,但他们工作正常,但没有一个与我提到的其他工具一起工作。我正在尝试W3School工具进行调整。到目前为止,它不起作用。 – Viet 2009-07-02 05:21:54

+1

@Viet:我的猜测也是你做错了事。除了XSLT 2.0处理器执行1.0代码的事实之外,我认为您花时间去寻找错误,而不是阅读XSLT 2.0规范。 – Tomalak 2009-07-02 05:43:31

+0

我发现Tidy转换后的HTML不是严格的XML,所以我列出的XSLT parpse没有给出输出。我使用Mozilla nsIXSLTProcessor。 HTML输入不是由我控制的,所以我无能为力。不管怎么说,还是要谢谢你。 – Viet 2009-07-02 09:04:27

0

经过一番刻苦努力和痛苦的测试,我发现了自己的答案:

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

谢谢大家参加讨论。