0

我正在将源模式中的家庭、工作和移动号码节点映射到目标模式中的家庭、工作和移动节点。

我需要确保数据与目标模式匹配(没有空格、标点符号、前导零、匹配[+0][0-9]*。这可以通过XSLT?

资源

<HTelephone>01656 123 123</HTelephone>
<WTelephone>01656-123-123</WTelephone>
<MTelephone>+447656 123 123</MTelephone>

目的地

<HTelephone>01656123123</HTelephone>
<WTelephone>01656123123</WTelephone>
<MTelephone>+447656123123</MTelephone>

当前内联 XSLT 调用模板

<xsl:template name="MNo" xmlns:msxsl="urn:schemas-microsoft-com:xslt" >
 <xsl:param name="inTelNo"/>
 <xsl:element name="MTelephone" >
     <xsl:value-of select="concat('+', translate($inTelNo, translate($inTelNo,'0123456789',''), ''))"/>
 </xsl:element>

我们需要验证第一个字符以允许 0 或 + 也,有什么想法吗?

4

1 回答 1

0

假设输入正确(一个根元素,使其成为格式良好的 XML)使用concat()translate函数来更改字符串。

输入

<?xml version="1.0" encoding="utf-8"?>
<root>
    <HTelephone>01656 123 123</HTelephone>
    <WTelephone>01656 123 123</WTelephone>
    <MTelephone>01656 123 123</MTelephone>
</root>

样式表

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

    <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/root">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy> 
    </xsl:template>

    <xsl:template match="root/*">
        <xsl:copy>
            <xsl:value-of select="concat('+',translate(.,' ',''))"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

输出

<?xml version="1.0" encoding="utf-8"?>
<root>
   <HTelephone>+01656123123</HTelephone>
   <WTelephone>+01656123123</WTelephone>
   <MTelephone>+01656123123</MTelephone>
</root>
于 2014-03-06T08:48:49.293 回答