Вывод 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>&lt;</xsl:text><xsl:value-of select="name()"/><xsl:text>&gt;</xsl:text>
    <xsl:value-of select="."/>
    <xsl:text>&lt;/</xsl:text><xsl:value-of select="name()"/><xsl:text>&gt;</xsl:text>
 </xsl:template>

</xsl:stylesheet>

Выход

<?php $content = "<p>Para one</p><p>Para two</p>";?>
Другие вопросы по тегам