【问题标题】:Saxon/X PHP API Stylesheet compilation failed - get useful error noticeSaxon/X PHP API 样式表编译失败 - 获取有用的错误通知
【发布时间】: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

标签: php xslt saxon


【解决方案1】:

确切的错误详细信息应显示在 apache 日志文件中。此外,累积的错误应该可以通过 getErrorCode 和 getErrorMessage 访问。我看到您在示例中对此进行了调用。如果它没有出现在这里,那么我怀疑这是一个值得提交的错误。

【讨论】:

  • No getErrorMessage 只说“net.sf.saxon.s9api.SaxonApiException:样式表编译失败:报告了 1 个错误”,正如我上面所说的。我也会为此打开一个错误问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
相关资源
最近更新 更多