这是我遇到的一个问题。
源代码:
<n0>Hello1</n0>
<n1>Hello3</n1>
<name>Hello2</name>
我可以用
<xsl:template match="*[starts-with(name(),'n')]">
匹配 n0,n1。但我不想匹配'name',我该怎么做才能只匹配n0,n1?
最佳匹配取决于您的规则。
例如,如果您只想专门排除“名称”,则使用...
*[starts-with(name(),'n')][not(self::name)]
另一方面,如果您想匹配 'n' 后跟一个数字(而不是 n 后跟一个字母或破折号),那么使用...
*[starts-with(name(),'n')][number(substring(name(),2,1))>-1]
在您可以明确且严格地定义所需的匹配条件之前,不可能给出最佳解决方案。
此外,如果您只想匹配 n1 和 n2,那么您可以使用...
n1 | n2
要匹配所有名为“n”的元素,后跟零个或多个数字,您可以使用
*[translate(name(), '0123456789', '') = 'n']
这会删除名称中的所有数字,然后检查是否只剩下一个“n”。由于 XML 名称不能以数字开头,因此您无需专门检查名称是否以 n 开头。要确保您有一个或多个数字而不是零或多个,只需添加一个额外的检查name() != 'n'
or not(self::n)
。