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 回答