Xpoint
   [напомнить пароль]

XSLT и disable-output-escaping

Метки: [без меток]
[удл]
2006-12-21 15:46:17 [обр] Mikle24[досье]
сообщение промодерировано

В xml файле находится html код:

<content_page> 
  <![CDATA[<h1>Text</h1>]]> 
</content_page>

Делаю такую xsl:

<xsl:template match="/">  
    <hr/> 
        <b>1</b> 
        <xsl:value-of select="content_page" disable-output-escaping="yes"/> 
        <b>2</b> 
    <hr/> 
</xsl:template>

В результате всё выводится как надо:

<hr> 
<b>1</b> 
  <h1>Text</h1> 
<b>2</b> 
<hr>

Если же я использую disable-output-escaping в call-template:

<xsl:template match="/">  
    <xsl:call-template name="test"> 
    <xsl:with-param name="param1"> 
        <b>1</b> 
        <xsl:value-of select="content_page" disable-output-escaping="yes"/> 
        <b>2</b> 
        </xsl:with-param> 
    </xsl:call-template> 
</xsl:template>  

<xsl:template name="test">  
    <xsl:param name="param1"/> 
    <hr/> 
    <xsl:copy-of select="$param1"/> 
    <hr/> 
</xsl:template>

то результат получается такой:

<hr> 
<b xmlns:xsl="http://www.w3.org/1999/XSL/Transform">1</b> 
  &lt;h1&gt;Text&lt;/h1&gt; 
<b xmlns:xsl="http://www.w3.org/1999/XSL/Transform">2</b> 
<hr>

т.е. disable-output-escaping не обрабатывается.

Как сделать так, чтобы при использовании call-template html тэги (а точнее < и >) выводились как они есть?

p.s. парсер xslt

спустя 6 минут [обр] Алексей В. Иванов(4/2861)[досье]
М Перенесено из форума "Программирование::PHP"
спустя 2 часа 6 минут [обр] keep(0/3)[досье]
сообщение промодерировано
думаю для достижения требуемого эффекта надо написать так:
<xsl:template match="some-tag">
      <xsl:apply-templates select="node()" mode="copy"/>
</xsl:template>

<xsl:template match="@*|node()" mode="copy">
   <xsl:copy>
      <xsl:apply-templates select="@*|node()" mode="copy"/>
   </xsl:copy>
</xsl:template>
спустя 3 часа 43 минуты [обр] Дмитрий(0/4)[досье]
ИМХО, хотеть такого не следует. Можно было организовать так, чтобы не пришлось делать даже disable-output-escaping.
спустя 2 года 7 месяцев [обр] Artem[досье]
Столкнулся с той же проблемой, теперь очень интересно:
  1. Почему нежелательно использовать "disable-output-escaping"? Для чего тогда он в стандарте?
  2. Почему работает в "apply-templates" и не работает в "call-template"? Чем это они принципиально отличаются?
Powered by POEM™ Engine Copyright © 2002-2005