2

这是我遇到的一个问题。

源代码:

<n0>Hello1</n0>
<n1>Hello3</n1>
<name>Hello2</name>

我可以用

<xsl:template match="*[starts-with(name(),'n')]">

匹配 n0,n1。但我不想匹配'name',我该怎么做才能只匹配n0,n1?

4

2 回答 2

3

最佳匹配取决于您的规则。

例如,如果您只想专门排除“名称”,则使用...

*[starts-with(name(),'n')][not(self::name)]

另一方面,如果您想匹配 'n' 后跟一个数字(而不是 n 后跟一个字母或破折号),那么使用...

*[starts-with(name(),'n')][number(substring(name(),2,1))>-1]

在您可以明确且严格地定义所需的匹配条件之前,不可能给出最佳解决方案。

此外,如果您只想匹配 n1 和 n2,那么您可以使用...

n1 | n2
于 2012-09-11T06:39:01.997 回答
0

要匹配所有名为“n”的元素,后跟零个或多个数字,您可以使用

*[translate(name(), '0123456789', '') = 'n']

这会删除名称中的所有数字,然后检查是否只剩下一个“n”。由于 XML 名称不能以数字开头,因此您无需专门检查名称是否以 n 开头。要确保您有一个或多个数字而不是零或多个,只需添加一个额外的检查name() != 'n'or not(self::n)

于 2012-09-11T06:47:17.817 回答