加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如果元素包含字母,如何编写xslt?

发布时间:2020-12-13 22:56:43 所属栏目:百科 来源:网络整理
导读:Sth应该是所有字母或正则表达式[A-Z].如何将xslt与正则表达式结合起来? xsl:if test="string-contains(//ns0:elem/value,'sth')" /xsl:if XPath / XSLT 1.0不支持正则表达式,但可以使用基本字符串函数执行简单验证. 白名单 XPath 1.0转换功能可用于模拟白名
Sth应该是所有字母或正则表达式[A-Z].如何将xslt与正则表达式结合起来?
<xsl:if test="string-contains(//ns0:elem/value,'sth')">


        </xsl:if>
XPath / XSLT 1.0不支持正则表达式,但可以使用基本字符串函数执行简单验证.

白名单

XPath 1.0转换功能可用于模拟白名单:

<xsl:variable name="alpha" 
              select="'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:if test="string-length(translate(.,$alpha,'')) &gt; 0">
    <!-- context node contains non-alpha characters -->
</xsl:if>

测试使用translate来首先删除所有大写和小写字母.如果结果字符串的长度不为零,则原始字符串必须包含其他字符.

请注意,上面的表达式可以简化为:

<xsl:if test="translate(.,'')">

…因为任何非空字符串的计算结果为true.

黑名单

使用双翻译方法将$alpha视为黑名单:

<xsl:if test="translate(.,translate(.,''),'')">
    <!-- context-node contains characters on the blacklist (in $alpha) -->
</xsl:if>

内部翻译返回一个字符串,其中删除了所有字母字符,然后将其用作第二个翻译调用的模板,从而生成仅包含字母字符的字符串.如果此字符串非零,则我们在黑名单中找到一个字符.这是一种经典的方法.例如,请参阅此前关于SO的问题:

> Replace special characters in XSLT

黑名单测试也可以这样执行:

not(string-length(translate(.,''))=string-length())

如果删除所有列入黑名单的字符后字符串的长度不等于原始字符串的长度,则该字符串必须包含黑名单中的字符.

摘要

黑名单和白名单实际上是同一枚硬币的两面.以下演示了它们的用法:

<xsl:if test="translate(.,'')">
    [contains some characters not on the list]
</xsl:if> 
<xsl:if test="not(translate(.,''))">
    [contains only characters on the list]
</xsl:if> 
<xsl:if test="translate(.,'')">
    [contains some characters on the list]
</xsl:if>
<xsl:if test="not(translate(.,''))">
    [contains only characters not on the list]
</xsl:if>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读