Как преобразовать одни теги в другие с помощью XSLT

У меня есть следующий xml:

<box>
   <title>bold text</title>
   some text
</box>

и следующий xsl:

<xsl:template match="box">
    <p style="background:red;">
        <xsl:apply-templates/>
    </p>
</xsl:template>

<xsl:template match="title">
    <p style='background:green;'>
        <xsl:apply-templates/>
    </p>
</xsl:template>

И я получил следующее:

<p style="background:red;"> </p>
<p style="background:green;">bold text</p>
some text
<p></p>

Но я хочу следующее:

<p style="background:red;">
   <p style="background:green;">bold text</p>
   some text
</p>

Как мне это сделать?


person Igor    schedule 22.04.2011    source источник
comment
Ты уверен в этом? Ваша таблица стилей должна давать желаемый результат.   -  person Wayne    schedule 22.04.2011
comment
Вы не должны получать такой вывод, если размещенные вами шаблоны — это единственное, что есть в вашей таблице стилей. Можете ли вы опубликовать полный XSLT? Могут быть другие шаблоны, вызывающие нежелательный вывод.   -  person Mads Hansen    schedule 22.04.2011
comment
Да :( Возможно, это ошибка libxsl. (Я использую преобразование PHP в XSL).   -  person Igor    schedule 22.04.2011
comment
Треклятый! Я смотрел на вывод fireBug, а не на обычный html. Обычный HTML правильный. Извините за вопрос! :П   -  person Igor    schedule 22.04.2011
comment
Вложение <p> элементов друг в друга — не очень хорошая идея. Парсер HTML попытается отсортировать их, отделив их друг от друга, и это то, что вы видите в Firebug.   -  person Michael Kay    schedule 22.04.2011


Ответы (1)


Когда я запускаю этот xslt/xml, я получаю такой результат:

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="box">
    <p style="background:red;">
        <xsl:apply-templates/>
    </p>
  </xsl:template>

  <xsl:template match="title">
    <p style='background:green;'>
        <xsl:apply-templates/>
    </p>
  </xsl:template>
</xsl:stylesheet>

XML-выход:

<?xml version="1.0"?>
<p style="background:red;">
   <p style="background:green;">bold text</p>
   some text
</p>

Это то, что вы хотите правильно?

person Abe Miessler    schedule 22.04.2011