我需要使用XSLT从单个++
的字符串中删除双+
。
例如:++31646331175
:我需要输出为+31646331175。
如果只有一个加号或根本没有加号,则完全忽略该字符串。
答案 0 :(得分:0)
您可以使用XSLT-2.0函数analyze-string
进行此操作。
因此,以下XSLT代码可以完成此任务:
输入XML:
<root>
<str>++0049134-343-285</str>
<str>+00421335-645-784</str>
<str>49134543-346-283</str>
<str>++0042134-347-282</str>
<str>++0041134-349-282</str>
</root>
正在处理XSLT-2.0文件:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/root/str">
<xsl:analyze-string select="text()" regex="\+(\+.*)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"/><xsl:text>
</xsl:text>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
输出为:
+0049134-343-285
+0042134-347-282
+0041134-349-282
使用matches
函数,模板的另一组合如下:
<xsl:template match="text()" />
<xsl:template match="str[matches(text(),'^\+\+[^+]+')]">
<xsl:value-of select="substring-after(text(),'+')"/><xsl:text>
</xsl:text>
</xsl:template>
此表达式更加精确,因为它排除了字符串开头三个+
或更多的字符串。
我希望这足以满足您的需求。