XML验证使用Schematron在PHP 5(Validate XML with Schematr

2019-08-17 03:44发布

我有与验证XML问题的Schematron 。

在我的代码加载XML和XSL为DOM文档对象,我试着改造:

$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,不是吗?

如果有人想看看更多的来源,文件是在:

  • $消息
  • CI-SIS_StructurationCommuneCDAr2.xsl

Answer 1:

你利用不需要XSL 2.0的Schematron版本,但是你有文件利用了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:版本:仅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警告该变量/匹配问题的广泛讨论。



文章来源: Validate XML with Schematron in PHP 5