【发布时间】:2016-02-01 15:23:17
【问题描述】:
我想在 XSLT 中每隔三个大写字母后添加零宽度空格。 在这里,我想选择文档中的所有文本节点,并在这些文本节点中过滤大写单词。
我的 XML 示例代码是:
<doc>
<front>
<lable>this is a TEST TEXT</lable>
<para>This is a TEST TEXT with UPPER and Lower</para>
</front>
<middle>
<lable>this is a TEST TEXT</lable>
<para>This is a TEST TEXT with UPPER and Lower</para>
</middle>
<back>
<lable>This is a TEST TEXT</lable>
<para>This is a TEST TEXT with UPPER and Lower</para>
</back>
</doc>
我写的 XSLT 是:
<xsl:template match="*/text()" priority="100">
<xsl:analyze-string select="." regex="^[A-Z]+">
<xsl:matching-substring>
<xsl:variable name="upperWord" select="substring(.,3)"/>
<xsl:value-of select="concat($upperWord,'​')"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
我期待的输出:
<doc>
<front>
<lable>this is a TES​T TEX​T</lable>
<para>his is a TES​T TEX​T with UPP​ER and Lower</para>
</front>
<front>
<lable>this is a TES​T TEX​T</lable>
<para>his is a TES​T TEX​T with UPP​ER and Lower</para>
</front>
<front>
<lable>this is a TES​T TEX​T</lable>
<para>his is a TES​T TEX​T with UPP​ER and Lower</para>
</front>
</doc>
Output I got:
<doc>
<front>
<lable>this is a TEST TEXT</lable>
<para>his is a TEST TEXT with UPPER and Lower</para>
</front>
<middle>
<lable>this is a TEST TEXT</lable>
<para>his is a TEST TEXT with UPPER and Lower</para>
</middle>
<back>
<lable>his is a TEST TEXT</lable>
<para>his is a TEST TEXT with UPPER and Lower</para>
</back>
</doc>
在这里,我无法理解为什么选择了单词的大写首字母以及为什么没有选择所有文本节点。 有人可以帮我解决这个问题.. 谢谢..
【问题讨论】: