如何匹配电子邮件并应用xml代码[xslt]

时间:2015-01-20 13:45:47

标签: regex xml xslt

我是XSLT的新用户,任何人都可以帮助从para标签中获取电子邮件ID和电话号码,并将相应的电子邮件和电话标记应用于此类文本

<email>dames.vi_no192@server.home.com</email><contact>+999841xxxx</contact> 

请参阅输入和所需输出

来源:

<para>
This is the para text and this para contains email id is dames.vi_no192@server.home.com and contact number is +9998412122
</para>

必填项:

<para>
This is the para text and this para contains emailid is <email>dames.vi_no192@server.home.com</email> and contact number is <contact>+9998412122</contact>
</para>

1 个答案:

答案 0 :(得分:0)

以下是一个示例,主要用于说明如何使用analyze-string

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

<xsl:template match="para//text()">
  <xsl:analyze-string select="." regex="(\w+[._])*\w+@(\w+\.)*\w+">
    <xsl:matching-substring>
      <email>
        <xsl:value-of select="."/>
      </email>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
      <xsl:analyze-string select="." regex="[+]{{0,2}}[0-9() ]*[0-9]+">
        <xsl:matching-substring>
          <contact>
            <xsl:value-of select="."/>
          </contact>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
          <xsl:value-of select="."/>
        </xsl:non-matching-substring>
      </xsl:analyze-string>
    </xsl:non-matching-substring>
  </xsl:analyze-string>
</xsl:template>

当然,真正的挑战是编写与电子邮件地址或电话号码所需的所有可能输入模式匹配的正则表达式,上述内容并不是完整的解决方案。

\w字符类包含数字,请参阅http://www.w3.org/TR/xmlschema-2/#charcter-classes中将\w定义为[#x0000-#x10FFFF]-[\p{P}\p{Z}\p{C}]的定义(除了“标点符号”,“分隔符”之外的所有字符)和“其他”字符)。至于第一个模式的结构,它需要零个或多个单词字符序列,后跟一个点或下划线字符,后跟一个非空的单词字符序列,后跟at符号@后跟零或更多的单词字符序列,后跟一个点,最后是一个强制的单词字符序列。

第二种模式允许零或最多两个加号,然后是一系列与括号和空格混合的数字,最后是一个强制数字序列。如上所述,这些模式就是一个例子,对于电子邮件地址,我想某个地方有一个规范,对于电话号码,您需要决定哪些字符,如空格或括号,您可以将数字分组。