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

How to match email and apply xml code [xslt]

我是 XSLT 的新手,任何人都可以帮助从 para 标签中获取电子邮件 ID 和 phone 号码,并将适当的电子邮件和 phone 标签应用于文本,例如这个

<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>

这里有一个例子,主要是为了展示如何使用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>

当然,真正的挑战是编写与您期望的电子邮件地址或 phone 号码的所有可能输入模式相匹配的正则表达式,以上并不意味着完整的解决方案。

\w字符class包含数字,参见http://www.w3.org/TR/xmlschema-2/#charcter-classes中的定义,其中定义\w[#x0000-#x10FFFF]-[\p{P}\p{Z}\p{C}](除[的集合外的所有字符=25=]、"separator" 和 "other" 个字符)。至于第一个模式的结构,它需要一个零个或多个单词字符序列,后跟一个点或一个下划线字符,然后是一个非空的单词字符序列,然后是 at 符号 @,然后是零或多个单词字符序列,后跟一个点,最后是一个强制性的单词字符序列。

第二个模式允许零个或最多两个加号,然后是与括号和空格混合的数字序列,最后是强制性数字序列。如前所述,模式作为示例,对于电子邮件地址,我猜某处有规范,对于 phone 数字,您需要决定允许哪些字符(如空格或括号)对数字进行分组。