cdata в xslt для html - PullRequest
       8

cdata в xslt для html

2 голосов
/ 30 октября 2009

У меня есть файл XSLT, генерирующий простой HTML. Мне нужно обернуть некоторые элементы в блоки CDATA, поэтому намереваются использовать cdata-section-elements. Но если элемент, который я хочу содержать, содержит CDATA только один <p> на странице, как мне заставить его не помещать CDATA во все другие элементы <p>?

Входные данные таковы:

<item>
  ...
  <g:category>Gifts under &amp;pound;10</g:category>
</item>

Мой XSL:

<xsl:element name="a">
  <xsl:attribute name="href">productlist.aspx</xsl:attribute>
  <xsl:copy-of select="text()" />
</xsl:element>

Я хочу, чтобы это выглядело примерно так:

Gifts under £10

Но все, что я получаю, это:

Gifts under &pound;10

Ответы [ 2 ]

5 голосов
/ 30 октября 2009

Хорошо, если у вас есть какой-то способ нацеливания на тег <p>, который вы хотите включить в раздел CDATA, вы можете сделать что-то вроде:

<xsl:output method="xml" version="1.0" encoding="UTF-8" 
    indent="yes" omit-xml-declaration="yes"/>

<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>
<xsl:template match="p[@test = 'test']">
    <xsl:copy>
        <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
        <xsl:apply-templates/>
        <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
    </xsl:copy>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

В этом случае ко всем тегам <p> с атрибутом test = 'test' будут применены CDATA, все остальные теги будут выводиться как обычно.

0 голосов
/ 30 октября 2009

Код, который у меня есть:

<xsl:element name="a">
  <xsl:attribute name="href">
    product.aspx?prod=<xsl:copy-of select="title/text()" />
  </xsl:attribute>
  <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
  <xsl:copy-of select="g:price" /> - <xsl:copy-of select="title/text()" />
  <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
</xsl:element>
...