我有一个看起来像
的xml文档<a>
<somenode att="1"></somenode>
</a>
<a01>
<apple att="2"></apple>
<somenode att="1"></somenode>
</a01>
我想尝试做的是匹配节点名称是'a'还是后跟一个数字(a0)和后跟两个数字(a01),有关如何做到这一点的任何想法?
到目前为止,我有以下内容
<xsl:apply-templates select="node()[starts-with(name(),'a')]">
但是这会选择苹果,以及如何做和OR / AND这样的多个匹配?
答案 0 :(得分:4)
在XSLT 2.0中,这将非常简单:
<xsl:apply-templates select="node()[matches(name(),'^a\d?\d?$')]">
在XSLT 1.0中,正则表达式不可用,所以它有点棘手,但以下应该有效:
<xsl:apply-templates select="node()[starts-with(name(), 'a') and
string-length(name()) <= 3 and
translate(name(), '0123456789', '') = 'a']" />
这里用“和”连接的三个部分确保: