我有以下元素作为更大的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>
答案 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