我正在尝试匹配所有a/c有b兄弟的元素.我试过了:
<xsl:template match="a/b/../c">
Run Code Online (Sandbox Code Playgroud)
但我得到"无法将表达式{..}转换为撒克逊的模式".
我的XSLT/XPath技能至多是基本的......
<xsl:template match="a[b]/c">
Run Code Online (Sandbox Code Playgroud)
Explanation:匹配c具有子a元素的元素的b子元素.
您还应该能够..在谓词中使用:
<xsl:template match="a/c[../b]">
Run Code Online (Sandbox Code Playgroud)
这与你的尝试类似.
你不能..直接在匹配模式中使用(即在谓词之外)的原因是模式不是XPath表达式,即使它们的外观和行为非常相似.特别是,只有"向下"轴(child::,descendant::,和attribute::)直接在图案允许的.(规范允许的唯一显式轴是child::和attribute::.descendant::通过模式//之间的步骤隐式允许.Saxon似乎在这里稍微弯曲规则,允许显式descendant::轴,甚至descendant-or-self::!)
限制轴的原因是(a)模式中很少需要其他轴,(b)这使得XSLT处理器在测试匹配时更加高效.
但模式中的谓词使用与XPath表达式相同的语法规则定义(在XSLT 1.0中有一些限制,比如不允许变量引用或者).所以你可以使用其他轴,比如缩写.current()parent::..
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |