3

入力データを制御できないシナリオがあります。たとえば、入力は次のようになります。

<phoneNumber>6504323957</phoneNumber>

また

<phoneNumber>650-432-3957</phoneNumber>

また

<phoneNumber>(650)432-3957</phoneNumber>

また

<phoneNumber>650.432.3957</phoneNumber>

ただし、私の出力は常に次のようになります

<areaCode>650</areaCode>
<phoneNumber>432-3957</phoneNumber>

私は次のxslを使用してこれを達成しようとしています。これは、ある条件でのみ機能し、他の条件では機能しません。

<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:element name="areaCode">
<xsl:value-of select="substring(phoneNumber,1,3)"/>
</xsl:element>
<xsl:element name="phoneNumber">
<xsl:value-of select="substring(phoneNumber,5,12)"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
4

2 に答える 2

2

試す

<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <xsl:variable name="numbersonly" select="translate(phoneNumber, translate(phoneNumber,'0123456789',''), '')"/>
    <xsl:element name="areaCode">
        <xsl:value-of select="substring($numbersonly,1,3)"/>
    </xsl:element>
    <xsl:element name="phoneNumber">
        <xsl:value-of select="substring($numbersonly,4,3)"/>-<xsl:value-of select="substring($numbersonly,7,4)"/>
    </xsl:element>
</xsl:template>

市外局番なしで入力を処理するには、簡単な計算を使用して、左からではなく右から選択することができます(電話全体が10桁であると想定)。

<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <xsl:variable name="numbersonly" select="translate(phoneNumber, translate(phoneNumber,'0123456789',''), '')"/>
    <xsl:variable name="length" select="string-length($numbersonly)"/>
    <xsl:element name="areaCode">
        <xsl:value-of select="substring($numbersonly,$length -9,3)"/>
    </xsl:element>
    <xsl:element name="phoneNumber">
        <xsl:value-of select="substring($numbersonly,$length -6,3)"/>-<xsl:value-of select="substring($numbersonly,$length -3,4)"/>
    </xsl:element>
</xsl:template>
于 2012-12-14T01:12:26.410 に答える
2

この変換

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="phoneNumber">
  <xsl:variable name="vbareNum" select="translate(.,'-().','')"/>
  <areaCode><xsl:value-of select="substring($vbareNum,1,3)"/></areaCode>
  <phoneNumber>
   <xsl:value-of select=
   "concat(substring($vbareNum,4,3),'-',substring($vbareNum,7))"/>
  </phoneNumber>
 </xsl:template>
</xsl:stylesheet>

このXMLドキュメントに適用した場合

<nums>
    <phoneNumber>6504323957</phoneNumber>
    <phoneNumber>650-432-3957</phoneNumber>
    <phoneNumber>(650)432-3957</phoneNumber>
    <phoneNumber>650.432.3957</phoneNumber>
</nums>

必要な正しい結果を生成します

<areaCode>650</areaCode>
<phoneNumber>432-3957</phoneNumber>
<areaCode>650</areaCode>
<phoneNumber>432-3957</phoneNumber>
<areaCode>650</areaCode>
<phoneNumber>432-3957</phoneNumber>
<areaCode>650</areaCode>
<phoneNumber>432-3957</phoneNumber>
于 2012-12-14T01:19:36.383 に答える