如何在字符串中查找++(双加号)并使用XSLT替换为+(单个)?

时间:2019-04-08 17:40:28

标签: xml xslt xslt-2.0

我需要使用XSLT从单个++的字符串中删除双+

例如:++31646331175:我需要输出为+31646331175。

如果只有一个加号或根本没有加号,则完全忽略该字符串。

1 个答案:

答案 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>&#xa;</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>&#xa;</xsl:text>
</xsl:template>

此表达式更加精确,因为它排除了字符串开头三个+或更多的字符串。 我希望这足以满足您的需求。