我在验证 XML 时遇到问题图解器 http://en.wikipedia.org/wiki/Schematron.
在我的代码中,我将 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 相关联,不是吗?
如果有人想查看更多来源,文件位于:
- $message http://pastebin.com/zEHnYP2t
- CI-SIS_StructurationCommuneCDAr2.xsl http://pastebin.com/9e19wiHf
您使用的 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:版本:仅支持 1.0 功能
接下来是一个未定义的变量:
警告:XSLTProcessor::importStylesheet():未定义的变量
警告:XSLTProcessor::importStylesheet():编译错误:文件 CI-SIS_StructurationCommuneCDAr2.xsl 第 4974 行元素模板
which is
<!--RULE -->
<xsl:template match="*[cda:templateId/@root = $templateObservationMedia]" priority="1000"
mode="M62">
哪一个是$templateObservationMedia
变量并导致
警告:XSLTProcessor::importStylesheet():无法编译谓词
要使其正常工作,您至少需要解决这些问题。由于在匹配模式中使用变量不是 XSLT 1.0,因此您至少需要解决这个问题。看XSLTProcessor::importStylesheet() 中的多个 PHP 警告 https://stackoverflow.com/q/1711001/367456有关变量/匹配问题的扩展讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)