这是我遇到的问题。
source xml:
<n0>Hello1</n0>
<n1>Hello3</n1>
<name>Hello2</name>
我可以用
<xsl:template match="*[starts-with(name(),'n')]">
匹配n0,n1。但我不想匹配'名字',我该怎么办才能匹配n0,n1?
答案 0 :(得分:3)
最佳匹配取决于您的规则。
例如,如果您只想特别排除'name',请使用...
*[starts-with(name(),'n')][not(self::name)]
另一方面,如果你想匹配'n'后跟一个数字(而不是跟随字母或短划线的n),那么使用......
*[starts-with(name(),'n')][number(substring(name(),2,1))>-1]
在您明确并严格定义所需匹配条件之前,无法提供最佳解决方案。
此外,如果您要匹配仅 n1和n2,那么您可以使用...
n1 | n2
答案 1 :(得分:0)
要匹配名为“n”的所有元素,后跟零个或多个数字,您可以使用
*[translate(name(), '0123456789', '') = 'n']
这将删除名称中的所有数字,然后检查剩下的唯一内容是否为“n”。由于XML名称不能以数字开头,因此您无需检查名称是否以n开头。要确保您有一个或多个数字而不是零或更多,只需添加name() != 'n'
或not(self::n)
的额外检查。