我有xml:
<?xml version="1.0" encoding="utf-8"?>
<offer>
<products>
<product id="1">
<description>
<name ><![CDATA[aa'bb]]></name>
<name2 >aa'bb</name2>
</description>
</product>
</products>
</offer>
和xslt:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:strip-space elements="node"/>
<xsl:strip-space elements="*" />
<xsl:template match="/offer/products/product" >
<xsl:variable name="title_free" select="description/name"/>
<xsl:variable name="title_free2" select="description/name2"/>
<xsl:value-of select="$title_free"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="$title_free2"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
和xsltproc的输出
$ xsltproc my.xsl my.xml
aa'bb
aa'bb
并且所需的输出应为:
aa'bb
aa'bb
任何想法如何实现?
如何将CDATA字段中的授权替换为字符?
答案 0 :(得分:2)
CDATA是一种在明确标识的文本中禁用特殊字符的方法。因此,如果您有很多特殊字符,例如<
和&
,例如代码示例中的一小段XML,那么您就不必逃避它们。
如果您在CDATA中写&
,则表示字符&
(与CDATA外部不同,它引入实体或字符引用)。
所以你要求的基本上是一个XML解析器,它在XSLT 1.0中不存在。如果你问的是如何将字符串替换为另一个字符串(这里&#34; '
&#34;进入&#34; '
&#34;)那么你可以使用{{1}在XSLT 2.0中或XSLT 1.0中的任何其他字符串操作。
但是我怀疑你真正需要的是解决你的输入数据,它恰好包含一些双重转义(转义字符串将自己封装到CDATA中)。