XSLT选择所有文本

时间:2011-08-31 21:55:06

标签: xslt

我想选择所有文字并进行搜索和替换 我想把所有的破灭变成不间断的破折号。

我正在使用this template进行搜索并替换部分,
现在我只需要通过它运行所有文本..

1 个答案:

答案 0 :(得分:3)

我不知道“非破坏性破折号”是什么意思,但这是一个简单的解决方案

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

 <xsl:param name="vRep" select="'&#8212;'"/>

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

 <xsl:template match="text()">
  <xsl:value-of select="translate(.,'-', $vRep)"/>
 </xsl:template>
</xsl:stylesheet>

当对任何XML文档应用此转换时,结果是同一文档,其中任何'-'被指定为全局参数$ vRep 的值替换。

例如,应用于此XML文档时

<a>
 <b>Hi - hi</b>
 - - -
 <c>
   <d>Wow... - cool</d>
 </c>
 - - -
</a>

结果是

<a>
  <b>Hi — hi</b>
 — — —
 <c><d>Wow... — cool</d></c>
 — — —
</a>

解释:使用标识规则,通过匹配任何文本节点的模板覆盖,并将其中的任何'-'字符转换为$vRep中包含的字符 - 使用标准XPath函数translate()