【问题标题】:Validate XML with Schematron in PHP 5在 PHP 5 中使用 Schematron 验证 XML
【发布时间】:2013-02-10 11:15:59
【问题描述】:

我在使用 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 相关联,不是吗?

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

【问题讨论】:

标签: php xml xslt schematron cda


【解决方案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,因此您至少需要解决这个问题。有关变量/匹配问题的详细讨论,请参阅 Multiple PHP Warnings in XSLTProcessor::importStylesheet()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多