2011-08-31 91 views
2

我想选择所有文本并执行搜索和替换。
我想把所有的虚线变成非破折号破折号。XSLT选择所有文本

我使用this template的搜索和替换部分,
现在我只需要运行的所有文字通吧..

+1

您需要一些测试数据来显示您试图匹配的内容。 – TheCodeKing

+0

当然.. https://gist.github.com/1184890 –

+0

而当你说文字?当然,你不是指整个文件?你只是指文本节点(保留结构)? – TheCodeKing

回答

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文档应用,其结果是在其中任何'-'由任何取代被指定为格洛巴的值相同的文档l参数$ 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> 

说明:使用身份规则的,由模板重写匹配任何文本节点,并将其中的任何'-'字符翻译为中包含的字符3210 - 通过使用标准的XPath函数translate()

+1

使用简单的['translate()'](http://www.w3.org/TR/xpath/#function-translate)函数+1。 –

+0

这看起来不错,但我似乎无法得到它的工作..它不是抛出一个错误,只是没有处理任何东西.. –

+0

@Kirk Strobeck:这个转换,应用于** *任何*** XML文档,用'$ vRep'中指定的内容替换''-''。您可能试图将其与您的代码结合起来,这是您的问题。了解如何执行多遍转换。 –