Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Работа с результирующим деревом


Автор: dma84 9.6.2012, 12:17
Есть XML файл

Код

<source>
 <title></title>
 <description></description>
 <keywords></keywords>
 <content>
   HTML разметка>
  <priceblock/>
   HTML разметка
 </content>
</source>


Узел <content/> содержит HTML разметку (не CDATA), в самой разметке присутствует узел <priceblock/>, наличие которого говорит, что тут нужно вывести некий блок.
Вопрос в следующем, при выводе содержимого узла <content/> с помощью xsl:copy-of, в результирующее дерево попадает узел <priceblock/>, а мне необходимо сначала провести преобразовние узла <priceblock/>, а затем вывести содержимое узла <content/> со всем набором узлов.

Конечно проще произвести все XSL преобразования, а затем на PHP заменить значение этого узла, но хочется всё оставить именно на XSL. Меня интересует только одно, можно ли это реализовать средствами XSL или нет? Спасибо

Автор: diadiavova 9.6.2012, 12:34
В начале документа размести вот такой шаблон
Код

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
Он будет копировать все, для чего не будет найдено других шаблонов.

Автор: dma84 9.6.2012, 12:46
Спасибо за ответ, уже решил эту проблему, а всего-то стоило на форум чиркнуть)

Пока обошёлся такой конструкцией:

Код

...
<xsl:call-template name="content"/>
...

<xsl:template name="content">
 <xsl:for-each select="content/*">
  <xsl:choose>
   <xsl:when test="name() != 'priceblock'">
    <xsl:copy-of select="current()"/>
   </xsl:when>
   <xsl:otherwise>
     бла-бла-бла
   </xsl:otherwise>
  </xsl:choose>
 </xsl:for-each>
</xsl:template>


На первое время прокатит, потом всё равно 10 раз перепишу)

Автор: diadiavova 9.6.2012, 12:49
Цитата(dma84 @  9.6.2012,  13:46 Найти цитируемый пост)
 потом всё равно 10 раз перепишу

Я в этом не сомневаюсь smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)