У меня проблема с проверкой 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, нет?
Если кто-то хочет посмотреть больше источников, файлы находятся по адресу:
В версии 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 шаблон элемента
который
<!--RULE --> <xsl:template match="*[cda:templateId/@root = $templateObservationMedia]" priority="1000" mode="M62">
который является переменной $templateObservationMedia
и приводит к
Предупреждение: XSLTProcessor :: importStylesheet (): Не удалось скомпилировать предикат
Чтобы получить эту работу, вам нужно хотя бы исправить эти проблемы. Поскольку использование переменной внутри шаблона соответствия не XSLT 1.0, вам нужно как минимум поработать над этим. См. Несколько предупреждений PHP в XSLTProcessor :: importStylesheet () для расширенного обсуждения проблемы с переменной / совпадением.