0

次のような XML があります。

<a>
  <b>
    <c>some text here</c>
  </b>
</a>
<a>
  <b>
    <c>another cool text</c>
  </b>
</a>

//a/b/c/text() 内の単語「cool」に一致させ、XML を次のように変換する必要があります

<a>
  <b>
    <c>some text here</c>
  </b>
</a>
<x>
  <y> prepend to cool text </y>
</x>
<a>
  <b>
    <c>another cool text</c>
  </b>
</a>

私はこれを試しました:

<xsl:template
        match="//a/b/c/matches(text(),'\.*cool\*.')">
...
</xsl:template>

しかし、運が悪い:

XTSE0340: XSLT Pattern syntax error at char 153 on line 30 in {...\.*cool\*...}:
  Function call may appear only at the start of a pattern

ここで何が欠けていますか?

4

1 に答える 1

1

一致が正しくありません。括弧内でテストする必要があります[]:

<xsl:template
        match="//a/b/c[matches(text(), '.*cool.*')]">
...
</xsl:template>

さらに、正規表現がそれほど簡単な場合は、XPath メソッドを使用できますcontains()

于 2012-06-06T19:39:31.607 に答える