Вывод XML с помощью инструкции обработки XSLT PHP
У меня есть следующий XML:
<content>
<p>Para one</p>
<p>Para two</p>
<img src='pic.jpg' alt='pic'/>
</content>
В моем XSLT у меня есть
<xsl:processing-instruction name="php">
$content = "<xsl:copy-of select="content/node()"/>";
</xsl:processing-instruction>
Но это выводит:
$content = "Para one
Para two";
Я хочу, чтобы это вывело:
$content = "<p>Para one</p><p>Para two</p><img src='pic.jpg' alt=='pic'/>";
Как я могу это сделать?
2 ответа
Решение
Этот скрипт, а также этот скрипт дал мне желаемый результат:
<xsl:include href="nodetostring.xsl"/>
<xsl:template match="content">
<xsl:param name="content">
<xsl:apply-templates mode="nodetostring" select="node()"/>
</xsl:param>
<xsl:processing-instruction name="php">
$content = '<xsl:copy-of select="$content"/>';
</xsl:processing-instruction>
</xsl:template>
Обычно, copy-of="node()"
извлекает дочерние узлы элемента Но в случае инструкций по обработке кажется, что выводится только текстовое содержимое.
Это не имеет смысла для меня, но решение ниже является обходным путем для этого.
стилей
<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/content">
<xsl:processing-instruction name="php">
<xsl:text>$content = "</xsl:text>
<xsl:apply-templates/>
<xsl:text>";</xsl:text>
</xsl:processing-instruction>
</xsl:template>
<xsl:template match="content/*">
<xsl:text><</xsl:text><xsl:value-of select="name()"/><xsl:text>></xsl:text>
<xsl:value-of select="."/>
<xsl:text></</xsl:text><xsl:value-of select="name()"/><xsl:text>></xsl:text>
</xsl:template>
</xsl:stylesheet>
Выход
<?php $content = "<p>Para one</p><p>Para two</p>";?>