これは私が遭遇した問題です。
ソース xml:
<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」という名前の後に0個以上の数字が続くすべての要素に一致させるには、使用できます
*[translate(name(), '0123456789', '') = 'n']
これにより、名前からすべての数字が削除され、「n」だけが残っていることが確認されます。XML 名は数字で始まることはできないため、名前が n で始まることを明確に確認する必要はありません。ゼロ以上ではなく 1 つ以上の数字があることを確認するには、name() != 'n'
またはnot(self::n)
.