Я думаю, что вы не можете передать этот $xml
методу XSLTProcessor::transformToXML
, потому что это массив (произведенный SimpleXMLElement::xpath
):
Предупреждение PHP: XSLTProcessor :: transformToXml () ожидает, что параметр 1 будет объектом, массив, указанный в /var/www/index.php в строке 11
Простое средство для этого - просто поместитьВыражение XPath в таблицу стилей XSL:
<xsl:output method="html"/> <!-- don't embed XML declaration -->
<xsl:template match="/nodes/node[1]">
<xsl:value-of select="@id"/>
<xsl:value-of select="title"/>
</xsl:template>
и:
$xml = simplexml_load_file('document.xml');
$xsl = simplexml_load_file('template.xsl');
$xslt = new XSLTProcessor;
$xslt->importStyleSheet($xsl);
echo '<div>'.$xslt->transformToXML($xml).'</div>';
РЕДАКТИРОВАТЬ:
Другой способ - просто использовать первый элемент массивав XSL-преобразовании (убедитесь, что оно не равно нулю):
$data = simplexml_load_file('document.xml');
$xpath = $data->xpath('/nodes/node[1]');
$xml = $xpath[0];
$xsl = simplexml_load_file('template.xsl');
$xslt = new XSLTProcessor;
$xslt->importStyleSheet($xsl);
echo '<div>'.$xslt->transformToXML($xml).'</div>';
и:
<xsl:template match="node">
<xsl:value-of select="@id"/>
<xsl:value-of select="title"/>
</xsl:template>