Xml XSLT函数从电话号码中过滤字母表和电话号码

Xml XSLT函数从电话号码中过滤字母表和电话号码,xml,xslt,transform,transformation,Xml,Xslt,Transform,Transformation,我必须使用XSLT将xml数据转换为csv。 电话号码字段可能包含字母、空格、国家代码(+1代表美国)以及特殊字符。我必须删除空格、特殊字符、国家代码和字母,只保留10位数字的数值。我在下面创建了一个函数,除去字母表之外的这些。要删除这两组字母(2*26),如果我采用这种方法,我必须使用replace函数52次 <xsl:function name="wd:gePhone"> <xsl:param name="phone_number" />

我必须使用XSLT将xml数据转换为csv。 电话号码字段可能包含字母、空格、国家代码(+1代表美国)以及特殊字符。我必须删除空格、特殊字符、国家代码和字母,只保留10位数字的数值。我在下面创建了一个函数,除去字母表之外的这些。要删除这两组字母(2*26),如果我采用这种方法,我必须使用replace函数52次

<xsl:function name="wd:gePhone">
        <xsl:param name="phone_number" />
        <xsl:if test="$phone_number !=' '" >
            <xsl:value-of select="normalize-space(replace(replace(replace(replace(replace(replace($phone_number,'-',''),'/',''),' ',''),'\)',''),'\(',''),'\+1',''))"/>
        </xsl:if>
    </xsl:function>

  • 你有没有其他过滤字母表的方法或功能 从这样的电话号码中也可以看到吗

您应该使用字符类,而不是多个替换调用(每个调用一个字符):

replace(replace($num, 'a', ''), 'b', '')
可以重写为:

replace($num, '[ab]', '')
这可以与两个字符的长字符串
+1
一起使用:

replace($num, '[ab]|\+1', '')
并且可以使用字符类中的范围
A-Z
匹配从A到Z的所有字符。因此,重复使用与示例中相同的字符,通过空间规范化,它将是:

normalize-space(
   replace($num,'[-/,()a-zA-Z]|\+1',''))

请注意,字符
-
,因为它在两个字符之间的字符类中具有特殊含义,如果它是
[

之后的第一个字符,而不是多个替换调用,每个替换调用只针对一个字符,则可以单独使用字符类:

replace(replace($num, 'a', ''), 'b', '')
可以重写为:

replace($num, '[ab]', '')
这可以与两个字符的长字符串
+1
一起使用:

replace($num, '[ab]|\+1', '')
并且,可以使用character类中的范围
A-Z
来匹配从A到Z的所有字符。因此,重复使用与您的示例中相同的字符,并使用空格规范化,这将是:

normalize-space(
   replace($num,'[-/,()a-zA-Z]|\+1',''))

请注意,字符
-
,因为它在两个字符之间的字符类中具有特殊含义,如果它是
[

之后的第一个字符,而不是多个替换调用,每个替换调用只针对一个字符,则可以单独使用字符类:

replace(replace($num, 'a', ''), 'b', '')
可以重写为:

replace($num, '[ab]', '')
这可以与两个字符的长字符串
+1
一起使用:

replace($num, '[ab]|\+1', '')
并且,可以使用character类中的范围
A-Z
来匹配从A到Z的所有字符。因此,重复使用与您的示例中相同的字符,并使用空格规范化,这将是:

normalize-space(
   replace($num,'[-/,()a-zA-Z]|\+1',''))

请注意,字符
-
,因为它在两个字符之间的字符类中具有特殊含义,如果它是
[

之后的第一个字符,而不是多个替换调用,每个替换调用只针对一个字符,则可以单独使用字符类:

replace(replace($num, 'a', ''), 'b', '')
可以重写为:

replace($num, '[ab]', '')
这可以与两个字符的长字符串
+1
一起使用:

replace($num, '[ab]|\+1', '')
并且,可以使用character类中的范围
A-Z
来匹配从A到Z的所有字符。因此,重复使用与您的示例中相同的字符,并使用空格规范化,这将是:

normalize-space(
   replace($num,'[-/,()a-zA-Z]|\+1',''))

请注意,字符
-
,因为它在两个字符之间的字符类中具有特殊含义,如果它是
[

之后的第一个字符,则可以自己使用。如果您只需要替换单个字符,还可以使用translate()函数


如果只需要替换单个字符,还可以使用translate()函数


如果只需要替换单个字符,还可以使用translate()函数


如果只需要替换单个字符,还可以使用translate()函数






是否可以将此电话号码的大小仅缩短10位?您可以使用
substring()
进行基于长度的字符串操作。但您需要更准确地告诉我们您希望实现的目标(输入、预期输出等)是否可以将此电话号码的大小仅缩短10位?您可以使用
substring()
进行基于长度的字符串操作。但您需要更准确地告诉我们您希望实现的目标(输入、预期输出等)。是否可以将此电话号码的大小仅缩短10位?您可以使用
substring()
用于基于长度的字符串操作。但您需要更准确地告诉我们您希望实现什么(输入、预期输出等)。是否可以将此电话号码的大小仅缩短10位?您可以使用
子字符串()
用于基于长度的字符串操作。但您需要更准确地告诉我们您希望实现什么(输入、预期输出等)