【发布时间】:2013-02-07 21:26:40
【问题描述】:
我正在尝试找到一种方法来将此转换重新工作到我不必在 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::?
提前致谢。
【问题讨论】:
-
是否要求您只使用 xslt-2.0(标签暗示了这一点)? xslt 标签意味着任何版本都可以工作。
-
@Ryan Gates,抱歉 Ryan 这有点误导,这仅适用于 XSLT-2.0。
-
为什么不直接使用
//p//p? -
@BeniBela 成功了!!谢谢!
-
我想我应该把它作为答案发布