如何使用XSLT移除XML字符串中的LF(xA)和Tab(x9)字符
移除XSLT变量中的换行(LF)和制表符(Tab)
当前输出的<a>标签id属性包含多余的换行(
)和制表符(	),示例如下:
<p class="Judg-1"><a id="
				[1]
			"></a></p>
原始XML
<?xml version="1.0" encoding="UTF-8"?> <Judgment> <Para level="1" no="1" pID="p1_1" indent="none"> <Text indent="none" align="left">Paragraph 1</Text> </Para> </Judgment>
原XSLT代码(尝试substring-after未生效)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xsl:stylesheet [<!ENTITY nbsp " ">]> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:param name="portlet"/> <xsl:output method="html" encoding="UTF-8" indent="no"/> <xsl:template match="Judgment//Para[@level=1]/Text[position() = 1] | Annex//Para[@level=1]/Text[position() = 1]"> <p class="Judg-1"> <xsl:variable name="para-no"> <!--[<xsl:value-of select="substring-after(substring-after(substring-after(../@pID,'p1_'), '
'), '	')"/>]--> [<xsl:value-of select="substring-after(../@pID,'p1_')"/>] </xsl:variable> <a id="{$para-no}"></a> </p> </xsl:template> </xsl:stylesheet>
解决方法
之前用substring-after无效,是因为你匹配的是字符串'
',但实际是变量内容中存在的控制字符(换行、制表符本身),而非转义后的字符串。直接用XSLT 2.0的replace()函数即可一次性移除所有目标字符。
修改后的XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xsl:stylesheet [<!ENTITY nbsp " ">]> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:param name="portlet"/> <xsl:output method="html" encoding="UTF-8" indent="no"/> <xsl:template match="Judgment//Para[@level=1]/Text[position() = 1] | Annex//Para[@level=1]/Text[position() = 1]"> <p class="Judg-1"> <!-- 先拼接出原始编号字符串 --> <xsl:variable name="para-no" select="concat('[', substring-after(../@pID,'p1_'), ']')"/> <!-- 移除所有换行(\n对应xA)和制表符(\t对应x9) --> <xsl:variable name="cleaned-para-no" select="replace($para-no, '[\n\t]', '')"/> <a id="{$cleaned-para-no}"></a> </p> </xsl:template> </xsl:stylesheet>
说明
replace($para-no, '[\n\t]', ''):用正则表达式匹配换行符(\n)或制表符(\t),一次性替换为空字符串,彻底移除这些控制字符。- 也可以拆分为两次
replace调用,效果一致:replace(replace($para-no, '\n', ''), '\t', '')
处理后生成的<a>标签id将不再包含多余的换行和制表符。
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

