Ошибки:
Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: Неопределенная переменная в /transform.php в строке 24 Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: ошибка компиляции: файл /protocols.xsl строка 18 шаблон элемента в /transform.php в строке 24 Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: Не удалось скомпилировать предикат в /transform.php в строке 24 Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: Неопределенная переменная в /transform.php в строке 24 Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: ошибка компиляции: файл /home6/oneninfi/public_html/craigfreeman/iphone/project1/protocols.xsl строка 22 шаблон элемента в /transform.php в строке 24 Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: Не удалось скомпилировать предикат в /transform.php в строке 24 Предупреждение: XSLTProcessor :: transformToXml () [xsltprocessor.transformtoxml]: Никакая таблица стилей, связанная с этим объектом в /transform.php в строке 35
PHP:
$xsl = new XSLTProcessor(); $xsldoc = new DOMDocument(); $xsldoc->load($_GET['xsl'].'.xsl'); // protocols.xsl $xsl->importStyleSheet($xsldoc); // LINE 24 if(isset($_GET['sectionNumber'])) $xsl->setParameter('', 'sectionNumber', $_GET['sectionNumber']); if(isset($_GET['protocolNumber'])) $xsl->setParameter('', 'protocolNumber', $_GET['protocolNumber']); if(isset($_GET['entryNumber'])) $xsl->setParameter('', 'entryNumber', $_GET['entryNumber']); $xmldoc = new DOMDocument(); $xmldoc->load($_GET['xml'].'.xml'); echo $xsl->transformToXML($xmldoc); // LINE 35
XSL:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xsl:stylesheet> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="protocolNumber"></xsl:param> <xsl:param name="sectionNumber"></xsl:param> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="page/section[@id=$sectionNumber]"> // LINE 18 <xsl:apply-templates select="protocol[@id=$protocolNumber]"/> </xsl:template> <xsl:template match="protocol[@id=$protocolNumber]"> // LINE 22 <h4>(<xsl:value-of select="$sectionNumber"/>.<xsl:value-of select="@id"/>) <xsl:value-of select="@title"/></h4> <!-- Applies templates to all child elements --> <ol><xsl:apply-templates/></ol> </xsl:template> <xsl:template match="start"> <span class="start"><xsl:value-of select="@level" /></span> </xsl:template> <xsl:template match="stop"> <span class="stop"><xsl:value-of select="@level" /> STOP</span> </xsl:template> <xsl:template match="note"> <span class="note"><span class="noteType"><xsl:value-of select="@title" /></span>: <xsl:value-of select="." /></span> </xsl:template> <xsl:template match="step"> <li><span class="step"><xsl:value-of select="."/></span></li> </xsl:template> </xsl:stylesheet>
XML:
<?xml version="1.0" encoding="UTF-8"?> <page type="Protocols"> <section id="3" title="Adult Cardiac Life Support"> <protocol id="0" title="Cardiac Arrest - General Procedures"> <start level="All Levels"/> <step>Verify patient is pulseless and apneic.</step> <step>Initiate or continue CPR. CPR is to be continued at all times, except during defibrillation and /or interruptions < 10 sec for patient transfer.</step> <step>Assure airway patency and begin use of BVM. Provide initial BLS airway management, including Oropharyngeal or Nasopharyngeal Airway.</step> <step>Apply AED or SAED if available. If AED already in place, wait until current shock sequence completion to switch to another AED or manual monitor – may use previously applied patches if compatible with new unit.</step> <step>Follow prompts provided by AED/SAED device.</step> <step>Utilize ALS, or initiate timely transport toward ALS (ALS intercept or hospital if closer). If ALS not available, no more than 3 shocks should be delivered at the scene. Defibrillation should not be performed in a moving ambulance.</step> <step>Advise receiving hospital ASAP.</step> <stop level="EMT"/> <start level="EMT-I, CC & P"/> <step>If AED/SAED not already applied, quick look using manual monitor and defibrillate PRN after CPR of at least 5 cycles (about 2 minutes). Apply limb leads and pads in between shock sequences as appropriate.</step> <step>Obtain vascular access.</step> <step>Secure definitive airway. If BLS airway is sufficient to maintain chest rise, continue until additional time or resources are available. If unable to intubate, continue use of BLS airway adjuncts or use alternate airway device.<br/><br/>emove Bag Valve device whenever transferring patient, moving patient in and out of Ambulance, or other times when Bag Valve device may dislodge the device.<br/><br/>Reassess airway patency after any movement of patient.</step> <stop level="EMT-I" /> <start level="EMT-CC & P"/> <step>Give medications as listed in the following specific arrhythmia / dysrhythmia protocols. </step> <note title="NOTE">Should IV/IO access not be available, Epinephrine, Atropine, and Lidocaine may be administered via ETT under direct, on-line Medical Control.</note> </protocol></section></page>
PHP5 XML / XSL включен
Мысли? Что-нибудь очевидное?
Посмотрите на эту ошибку: Предупреждение: XSLTProcessor :: importStylesheet () [xsltprocessor.importstylesheet]: ошибка компиляции: файл /protocols.xsl строка 18 шаблон элемента в /transform.php в строке 24
В строке 18 вы:
<xsl: template match = "page / section [@ id = $ sectionNumber ]"> // LINE 18
Где определено $ sectionNumber? PHP не видит этого.
Одна из возможностей заключается в том, что XSL-процессор действительно жалуется на
не объявляется как объект. Попробуйте изменить doctype на
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp ' '> ] >
Ваша таблица стилей неверна XSLT 1.0: вы не можете иметь ссылку на переменную / параметр в шаблоне
Вы можете использовать ссылку на переменные / параметры в шаблонах XSLT 2.0.
Как было предложено @abc, вам нужно пройти этот тест внутри шаблона контента.
Та же проблема здесь. Я работал вокруг него, добавляя узлы «xsl: if» в узлах «xsl: template». В вашем случае это даст:
<xsl:template match="page/section"> // LINE 18 <xsl:if test="@id=$sectionNumber"> <xsl:apply-templates select="protocol[@id=$protocolNumber]"/> </xsl:if> </xsl:template> <xsl:template match="protocol"> // LINE 22 <xsl:if test="@id=$protocolNumber"> <h4>(<xsl:value-of select="$sectionNumber"/>.<xsl:value-of select="@id"/>) <xsl:value-of select="@title"/></h4> <!-- Applies templates to all child elements --> <ol><xsl:apply-templates/></ol> </xsl:if> </xsl:template>
я столкнулся с одной и той же проблемой, кажется, проблема в XSLTProcessor, если вы вызываете XSL с параметром, определяете параметр на `
<template match="/"><xsl:parameter name="whatever"/">
то вы можете вызвать xslt->setParameter
, он дает ошибки в журнале apache, но, похоже, работает!
Полагает, что $ _GET ['xsl'] пуст.
В вашем xsl есть ошибка. Когда вы загружаете его в объект XSLTProcessor
, он терпит неудачу. Поэтому вы не можете применить его к xml.