4

我在使用schematron验证 XML 时遇到问题。

在我的代码中,我将 XML 和 XSL 作为 DOMDocument 对象加载,并尝试转换:

$domSche = new DOMDocument();
$domSche->loadXML($message);

$domXSLSche = new DOMDocument();
$domXSLSche->load("CI-SIS_StructurationCommuneCDAr2.xsl");

$xsltsche = new XSLTProcessor();
$xsltsche->importStylesheet($domXSLSche);

$XSLValid = $xsltsche->transformToXml($domSche);

但是该函数返回此错误:

XSLTProcessor::transformToXml():没有与此对象关联的样式表

从技术上讲,我不明白 importStylesheet 将我的 XSL 与 XML 相关联,不是吗?

如果有人想查看更多来源,文件位于:

4

1 回答 1

1

您使用的 Schematron 版本不需要 XSL 2.0,但是您拥有的文件使用了 XSL 2.0 功能。

XSLTProcessor在 PHP 中仅支持 XSL 1.0。因此,该文件中使用的某些功能不可用并导致导入失败。

由于无法导入样式表,因此无法运行转换。


错误信息

警告:XSLTProcessor::transformToXml():没有与此对象关联的样式表

表示样式表丢失。不在磁盘或内存中,而是用于转换。

那是因为它有错误,最终无法编译。

在您的情况下,您拥有的 XSL 文件是 2.0 版本,但 PHP 仅支持 1.0 功能。它还使用未设置(定义)的变量。当我加载您的示例数据时,我收到以下错误:

警告:XSLTProcessor::importStylesheet():编译错误:文件 CI-SIS_StructurationCommuneCDAr2.xsl 第 13 行元素样式表

这是:

            version="2.0">

并由下一个警告解释:

警告:XSLTProcessor::importStylesheet(): xsl:version: 仅支持 1.0 功能

接下来是一个未定义的变量:

警告:XSLTProcessor::importStylesheet():未定义变量

警告:XSLTProcessor::importStylesheet():编译错误:文件 CI-SIS_StructurationCommuneCDAr2.xsl 第 4974 行元素模板

这是

    <!--RULE -->
    <xsl:template match="*[cda:templateId/@root = $templateObservationMedia]" priority="1000"
                  mode="M62">

这是$templateObservationMedia变量并导致

警告:XSLTProcessor::importStylesheet():编译谓词失败

要使其正常工作,您至少需要解决这些问题。由于在匹配模式中使用变量不是 XSLT 1.0,因此您至少需要解决这个问题。有关变量/匹配问题的扩展讨论,请参阅XSLTProcessor::importStylesheet() 中的多个 PHP 警告。

于 2013-03-05T16:06:38.530 回答