XSLT模板匹配和XPath

时间:2012-07-19 11:43:36

标签: xml xslt xpath

我有XML文件:

...
    <Chart id="c01">
      <expires>2012-07-19 12:20:00</expires>
      <data><![CDATA[...]]></data>
    </Chart>
...

其中CDATA是B64编码的PNG图像,并且希望将XML转换为HTML以查看图像。

为此,我设置XSL输出文本并转储CDATA:

<xsl:output method="text"/>

<xsl:template match="//data/text()">
  <xsl:value-of select="."/>
</xsl:template>

在同一个模板中,我将基本的HTML结构包装起来,我将其排除在这里以供清除。

问题在于:如果我在XML文件//data/text()上使用XPath,我只获得CDATA文本,但是在上面的XSL中我也得到了&#34; 2012-07-19 12:20:00&#34;来自<expires> XML元素,在输出中。

我想这是我失踪的一些基本问题,但为什么日期也会被淘汰,我怎样才能在输出中避免它?

1 个答案:

答案 0 :(得分:1)

实现这一目标的最短途径可能是

 <xsl:template match="*[not(self::data)]/text()"/>

完整转型

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="*[not(self::data)]/text()"/>
</xsl:stylesheet>

将此转换应用于XML文档

<t>
    <Chart id="c01">
        <expires>2012-07-19 12:20:00</expires>
        <data><![CDATA[ImageBlob]]></data>
    </Chart>
</t>

产生了想要的正确结果:

ImageBlob