0

私は少し似ているxmlドキュメントを持っています

<a>
<somenode att="1"></somenode>
</a>
<a01>
<apple att="2"></apple>
<somenode att="1"></somenode>
</a01>

ノード名が「a」またはその後に1つの数字(a0)が続き、その後に2つの数字(a01)が続く場合、私がやろうとしていることは一致です。これを行う方法についてのアイデアはありますか?

私はこれまでに次のものを持っています

<xsl:apply-templates select="node()[starts-with(name(),'a')]">

しかし、これはアップルも選択します。また、OR / ANDのような複数の一致を行う方法もありますか?

4

1 に答える 1

4

XSLT 2.0では、これは非常に簡単です。

<xsl:apply-templates select="node()[matches(name(),'^a\d?\d?$')]">

XSLT 1.0では、正規表現は使用できないため、少し注意が必要ですが、次のように機能するはずです。

<xsl:apply-templates select="node()[starts-with(name(), 'a') and
                                    string-length(name()) &lt;= 3 and
                                    translate(name(), '0123456789', '') = 'a']" />

ここで「and」で結合された3つの部分は、次のことを保証します。

  • 名前は「a」で始まります
  • 名前は3文字以下です
  • 名前から数字が削除されたときに残るのは、文字列「a」だけです(つまり、その単一の「a」以外の文字はすべて数字でした)。
于 2013-02-08T15:59:46.063 に答える