1
如何使用XSLT查找單詞節點之前和之後的單詞?XSLT找到另一個單詞附近的單詞
如何使用XSLT查找單詞節點之前和之後的單詞?XSLT找到另一個單詞附近的單詞
I.在XSLT 2.X/XPath的2.x的一個可以使用的功能和tokenize()index-of()以產生具有單行XPath表達式所期望的結果:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pWord" select="'three'"/>
<xsl:template match="text()">
<xsl:sequence select=
"tokenize(., ',\s*')
[index-of(tokenize(current(), ',\s*'), $pWord) -1]"/>
<xsl:sequence select=
"tokenize(., ',\s*')
[index-of(tokenize(current(), ',\s*'), $pWord) +1]"/>
</xsl:template>
</xsl:stylesheet>
當這種轉化是施加在下面的XML文檔:
<t>One, two, three, four</t>
有用,正確的結果產生:
two four
II。 XSLT 1.0解決方案
有可能使用的FXSL的strSplit-to-Words
模板解決XSLT 1.0相同的任務。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
>
<xsl:import href="strSplit-to-Words.xsl"/>
<xsl:output method="text"/>
<xsl:param name="pWord" select="'three'"/>
<xsl:template match="/">
<xsl:variable name="vrtfwordNodes">
<xsl:call-template name="str-split-to-words">
<xsl:with-param name="pStr" select="/"/>
<xsl:with-param name="pDelimiters"
select="', 	 '"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="vwordNodes"
select="ext:node-set($vrtfwordNodes)/*"/>
<xsl:variable name="vserchWordPos" select=
"count($vwordNodes
[. = $pWord]/preceding-sibling::*
) +1"/>
<xsl:value-of select=
"concat($vwordNodes[$vserchWordPos -1],
' ',
$vwordNodes[$vserchWordPos +1]
)
"/>
</xsl:template>
</xsl:stylesheet>
當這種轉變是在同一個XML文檔應用:
<t>One, two, three, four</t>
想要的,正確的結果產生:
two four
很好的問題(+1)。查看我的答案以獲取完整的XSLT 1.0和XSLT 2.x解決方案。 :) – 2010-05-31 17:04:36