3

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

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

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

如果不存在这样的模式,我需要简单地写出@V不带任何格式的值。

我可以使用 XSLT 2.0 解决方案

我希望我可以使用 match() 函数,例如

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

2 回答 2

6

我想你需要的只是:

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

您不必匹配整个字符串即可获得true()...我告诉我的学生尽可能写短的正则表达式。

于 2013-09-20T01:57:57.803 回答
4

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

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

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

 contains($result, "[XX]")

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

于 2013-09-20T01:31:48.363 回答