xslt xml到html:如何匹配以'n'开头而不是'name'的东西?

时间:2012-09-11 06:31:18

标签: html xml xslt

这是我遇到的问题。

source xml:

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

我可以用

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

匹配n0,n1。但我不想匹配'名字',我该怎么办才能匹配n0,n1?

2 个答案:

答案 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)的额外检查。