如何匹配电子邮件并应用 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 数字,您需要决定允许哪些字符(如空格或括号)对数字进行分组。
我是 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 数字,您需要决定允许哪些字符(如空格或括号)对数字进行分组。