我有这样的XML:
<style name='Danger'/>
<style name='Danger_2'/>
<style name='Danger_3'/>
<style name='Warning'/>
<style name='Warning_2'/>
<style name='Warning_3'/>
<style name='Body'/>
我正在尝试处理名称中包含“危险”或“警告”的所有样式。 天真的方法不起作用:
<xsl:template match="style[contains(@name, 'Danger|Warning')]">
我知道你可以在XSLT 2.0中完成匹配:
"style[@name=('Danger','Warning')]"
“包含”匹配是否有解决方案?
This related question有一个有趣的解决方案:'使用管道(或其他适当的字符)分隔字符串',但尽管使用'contains'仅适用于完全匹配(因此它将匹配'Danger'但不是'Danger_1')。
答案 0 :(得分:3)
使用XSLT / XPath 2.0及更高版本,matches
函数(http://maxtoroq.github.io/xpath-ref/fn/matches.html)具有正则表达式支持style[matches(@name, 'Danger|Warning')]
。
此外,您还可以使用style[some $s in ('Danger','Warning') satisfies contains(@name, $s)]
,这也适用于XSLT / XPath 2.0及更高版本。
答案 1 :(得分:1)
您是否尝试过以下操作?
<xsl:template match="style[contains(@name, 'Danger') or contains(@name, 'Warning')]">