XSLT - 检查元素字符串中是否存在模式

时间:2013-09-20 01:19:31

标签: regex xslt xslt-2.0

我有以下元素作为更大的XML的一部分

<MT N="NonEnglishAbstract" V="[DE] Deutsch Abstract text [FR] French Abstract text"/>

我需要对@V属性中的值进行一些格式化,只要它包含[DE],[FR]或任何两个大写字母代表方括号内的国家/地区代码。

如果不存在这样的模式,我只需要编写@V的值而不进行任何格式化。

我可以使用XSLT 2.0解决方案

我希望我可以使用匹配()函数,如

<xsl:choose>
<xsl:when test="matches(@V,'\[([A-Z]{{2}})\]([^\[]+'">
//Do something
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@V"/>
</xsl:otherwise>
</xsl:choose>

2 个答案:

答案 0 :(得分:5)

我认为你所需要的只是:

matches(@V,'\[[A-Z][A-Z]\]')

你不必匹配整个字符串来获得true() ......我告诉我的学生写一个尽可能短的注册表。

答案 1 :(得分:3)

您尚未发布任何有关您尝试过的内容。如何查找翻译功能并将字符串大写字母翻译为“X”之类的内容。然后测试该字符串结果是否存在[XX]。仅此一项就可以告诉您是否需要处理它。

<xsl:variable name="result">
   <xsl:value-of select="translate(@V,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','XXXXXXXXXXXXXXXXXXXXXXXXX')"/>
</xsl:variable>

然后使用该结果,然后测试:

 contains($result, "[XX]")

不需要正则表达式,纯XSL 1.1