我正在使用datapower xi50,以下是我的输入xml
<Sample>
<AccountNumber>37289882</AccountNumber>
<SortCode>789-88-8907</SortCode>
<CardNumber>4545-6767-9876-8764</CardNumber>
<address>j-89-8999</address>
</Sample>
我必须得到以下输出
<Sample>
<AccountNumber>37289882</AccountNumber>
<SortCode>789-xx-xxxx</SortCode>
<CardNumber>4545-xxxx-xxxx-xxxx</CardNumber>
<address>j-89-8999</address>
</Sample>
特别是每当我们有以下格式时 -
678-87-2827(3 number-2 number-4 number)
5253-2626-9808-8787(4 number-4 number-4 number-4 number)
我们必须将其更改为
678-xx-xxxx
5253-xxxx-xxxx-xxxx
以下是我正在做的事情
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dp="http://www.datapower.com/extensions"
xmlns:dpconfig="http://www.datapower.com/param/config"
xmlns:regexp="http://exslt.org/regular-expressions"
extension-element-prefixes="dp"
exclude-result-prefixes="dp">
<xsl:template match="/">
<xsl:value-of select="regexp:replace(string(.), '-\d{2}-\d{4}', 'i', '-xx-xxxx')"/>
<xsl:value-of select="regexp:replace(string(.), '-\d{4}-\d{4}-\d{4}', 'i', '-xxxx-xxxx-xxxx')"/>
</xsl:template>
</xsl:stylesheet>
我现在正在获得输出
但输出正在两次
37289882
789-xx-xxxx
4545-6767-9876-8764
j-89-8999
37289882
789-88-8907
4545-xxxx-xxxx-xxxx
j-89-8999
是因为两次<xsl:value-of select>
由于
答案 0 :(得分:2)
以下解决方案使用XSLT 2.0。我知道您的样式表在XSLT 1.0中,但我现在无法访问EXSLT扩展函数。
我希望regexp:match
和regexp:replace
函数与XSLT 2.0功能没有太大差别,这样您就可以自己轻松调整样式表。
<强>样式表强>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/Sample|Sample/*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:choose>
<xsl:when test="matches(.,'(\d{3})-(\d{2})-(\d{4})') or matches(.,'(\d{4})-(\d{4})-(\d{4})-(\d{4})')">
<xsl:value-of select="concat(substring-before(.,'-'),'-',replace(substring-after(.,'-'),'\d','x'))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?>
<Sample>
<AccountNumber>37289882</AccountNumber>
<SortCode>789-xx-xxxx</SortCode>
<CardNumber>4545-xxxx-xxxx-xxxx</CardNumber>
<address>j-89-8999</address>
</Sample>