【问题标题】:How to use <![CDATA[]]> in XSLT?如何在 XSLT 中使用 <![CDATA[]]>?
【发布时间】:2014-08-20 08:27:52
【问题描述】:

我在 XSLT 中使用的变量看起来像:

<xsl:variable name="ShortDescription" select="str[@name = 'ShortDescription']"/>
<!--Short Description field-->
       <xsl:if test="$ShortDescription !=''">

        <shortdescription><![CDATA[ <xsl:value-of select="$ShortDescription" disable-output-escaping="no"/> ]]></shortdescription>

       </xsl:if>

但它显示为文本而不是 $ShortDescription 变量的值,输出看起来像:

<shortdescription>
&lt;xsl:value-of select="$ShortDescription" disable-output-escaping="no"/&gt;
</shortdescription>

预期输出如下:

<shortdescription>
<![CDATA[Maximum Power: 520 W<br/>+12V Rails: Dual<br/>]]>
</shortdescription>

如何在 XSLT 中使用&lt;![CDATA[]]&gt;

【问题讨论】:

  • 你期望什么输出?
  • @CédricBignon 我已经用预期的输出更新了我的问题
  • Add CDATA to an xml file的可能重复

标签: xml xslt


【解决方案1】:

XSLT 是 XML,因此您当然可以在 XSLT 代码中使用 CDATA 部分,就像您所做的那样。但是,您似乎希望 XSLT 代码的输出包含 shortdescription 内容的 CDATA 部分,在这种情况下您需要

<xsl:output method="xml" cdata-section-elements="shortdescription"/>

XSLT 将保持原样

<shortdescription><xsl:value-of select="$ShortDescription"/></shortdescription>

【讨论】:

  • 但是请注意 (a) 这仅在转换的输出被 XSLT 处理器序列化(而不是发送到 DOM 树或另一个转换)时才有效; (b) 该要求被误导;要求将输出文本包含在 CDATA 部分中的人对 XML 的理解很差。
  • @MichaelKay cdata 的有效用例是什么?
  • @Dragas,我想说的是,将 HTML 标记之类的标记格式不正确,因此必须将其转义以存储在 XML 中,这样可以将其放在 CDATA 部分中。读好它(例如&lt;p&gt;This is a paragraph with &lt;strong&gt;text&lt;/strong&gt;),同时不得不逃避例如&amp;lt;p&amp;gt; as &amp;lt;p&amp;gt; 对 XSLT/XML 解析器或序列化程序没有影响,但会使人类消费者难以阅读嵌入在 XML 中的 HTML 数据。
  • 我在测试目录中使用它的一个地方:&lt;test&gt;&lt;query&gt;&lt;![CDATA[&lt;e&gt;{2+2}&lt;/e&gt;]]&gt;&lt;/query&gt;&lt;expect&gt;&lt;![CDATA[&lt;e&gt;4&lt;/e&gt;]]&gt;&lt;/expect&gt;&lt;/test&gt; 你可以用&amp;lt;&amp;gt; 转义尖括号,但它的可读性较差。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2012-08-20
相关资源
最近更新 更多