避免使用“ancestor ::”Xpath轴

时间:2013-02-07 21:26:40

标签: xml xpath xslt-2.0

我正在尝试找到一种方法来将此转换重新编写到我不必在Xpath中使用ancestor::轴的位置:

<xsl:template match="p[ancestor::p]">
     <xsl:apply-templates select="node() except ppr" />
</xsl:template>

来源示例:

<root>
  <p>
     <p/>
     <section>
        <p/>
     </section>
     <ppr/>
     <content/>
     <p/>
     <picture/>
  </p>
</root>

期望的输出:

<root>
  <p>
     <section>
     </section>
     <ppr/>
     <content/>
     <picture/>
  </p>
</root>

我无法使用显式Xpath或定位来抓取这些<p>元素,因为它们的位置是随机的,并且在我的原始源文档中没有模式。

我试图不使用ancestor::的原因是因为我正在使用的XSLT处理器正在花费30-50秒来评估该Xpath表达式。 我不希望这个问题是关于我正在使用哪个XSLT处理器或者我的设置的其他实现,而是关注手头的问题:有没有办法在我上面不使用ancestor::变换吗

提前致谢。

1 个答案:

答案 0 :(得分:3)

原来简单如下:

//p//p