【发布时间】:2016-03-15 13:02:23
【问题描述】:
我在我的 PHP 中使用 Saxon/C API 作为 XSLT 2.0 处理器版本 1.0.0。我使用了 0.3 版,它完美地编译了我的样式表。不幸的是,0.3 在我需要的一个功能中有一个错误,所以我升级到了 1.0.0。错误消失了,但现在它没有编译我的 XSTL 并说
net.sf.saxon.s9api.SaxonApiException : Stylesheet compilation failed: 1 error reported
这绝对没有帮助。样式表包含几十个文件并且非常复杂(否则我会使用 libxml),所以如果没有正确的错误消息,我没有丝毫机会找出问题所在(或在此处发布)。 那么,我怎样才能获得可以使用的错误消息?
提前致谢!
--
我的 PHP 代码(而不是上面提到的例子here):
$saxonProc = new \Saxon\SaxonProcessor();
$saxon = $saxonProc->newXsltProcessor();
$saxon->setSourceFromFile('source.xml');
$saxon->compileFromFile('style.xml');
$result = $saxon->transformToString();
if($result == NULL) {
$errCount = $saxon->getExceptionCount();
if($errCount > 0 ){
for($i = 0; $i < $errCount; $i++) {
$errCode = $saxon->getErrorCode(intval($i));
$errMessage = $saxon->getErrorMessage(intval($i));
echo 'Error: Code='.$errCode.' Message='.$errMessage;
}
$saxon->exceptionClear();
}
}
echo $result;
$saxon->clearParameters();
$saxon->clearProperties();
样式表的开头:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:t="http://www.tei-c.org/ns/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="t" version="2.0">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:include href="global-varsandparams.xsl"/>
【问题讨论】:
-
嗨,apache2 错误日志文件是否详细说明了有关该错误的任何有用信息?通常确切的错误会出现在那里。如果没有,那么您可以尝试使用以下 C 程序在 C/C++ 中运行样式表。编译后,您可以像使用相同选项的 Java 版本一样从命令行运行 Saxon/C:dev.saxonica.com/repos/archive/opensource/latest9.6/hec/… 另请参阅有关如何编译和运行它的详细信息的错误问题:saxonica.plan.io/issues/2422
-
下面这行似乎是错误的:$saxon->compileFromFile('style.xml');
-
非常感谢,你又一次救了我的命。我是这样找到问题的(我本可以自己考虑错误日志,但我没有,不知道为什么。有趣的是,它是参数声明中的隧道属性。显然,Saxon/C 1.0.0 在隧道上失败="yes" 属性并显示“xsl:call-template on line 12 column 37 of style.xml: XTSE0680: 参数 xxx 未在被调用模板中声明”这似乎是一个错误。我将在你的追踪器,好吗?
-
请在主要的撒克逊项目上打开一个错误,因为我认为这是核心产品中的一些东西:saxonica.plan.io/projects/saxon/issues