请帮忙。 需要能够选择/提取位于相同重复~字符之间的字符串。
例:狗逃~从栅栏~跑过马路~进入车流,但没有~受伤谢天谢地。 我们~很高兴狗是安全的。
按照这种格式AAA=BBBBB=CCCCCCCCCCCCCCCC=D=FFFFF=GG=H,尝试应用以下方法,但无法使用此方法提取:
<xsl:value-of select="substring-before(
substring-after ($vari, , '=')
, '=')"/>
对于BBBBB
或:
<xsl:value-of select="substring-before(
substring-after ( substring-after ($vari, '='), '=')
, '=')"/>
对于中交中交
。任何帮助将不胜感激。
此转换:
<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:template match="t">
<xsl:param name="pIndex" select="0"/>
<xsl:variable name="vToken" select=
"substring-before(substring(concat(.,'~'), $pIndex+1), '~')"/>
<xsl:variable name="vnewIndex" select="$pIndex+string-length($vToken)+1"/>
<token>
<xsl:value-of select="$vToken"/>
</token>
<xsl:apply-templates select="self::node()[not($vnewIndex >= string-length(.))]">
<xsl:with-param name="pIndex" select="$vnewIndex"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<t>The dog escaped ~ from the fence ~ and ran across the road ~ into traffic, but did not ~ get hurt thankfully. We are ~ very happy the dog is safe.</t>
产生所需的正确结果:
<token>The dog escaped </token>
<token> from the fence </token>
<token> and ran across the road </token>
<token> into traffic, but did not </token>
<token> get hurt thankfully. We are </token>
<token> very happy the dog is safe.</token>