XSLT:将模板应用于不包含特定子节点的节点

时间:2011-01-12 17:39:23

标签: xml xslt docbook

我正在使用docbook并使用的模板在我的表条目中插入了零宽字符。哪个好,但如果表条目包含<para>元素,我需要应用模板 NOT 。那么,我是否可以将模板应用于不包含<entry>的所有<para>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:d="http://docbook.org/ns/docbook">
<xsl:import href="urn:docbkx:stylesheet"/>

...

<xsl:template match="text()[parent::d:entry]">
    <xsl:call-template name="intersperse-with-zero-spaces">
        <xsl:with-param name="str" select="."/>
    </xsl:call-template>
</xsl:template>

...

2 个答案:

答案 0 :(得分:2)

<xsl:template match="d:entry[not(d:para)]">匹配任何entry个没有para个孩子的元素。 <xsl:template match="d:entry[not(descendant::d:para)]">匹配任何entry个没有para个后代的元素。

或者对于您发布的模板,您可以使用<xsl:template match="text()[parent::d:entry[not(d:para)]]">

答案 1 :(得分:1)

<xsl:template match="text()[parent::d:entry[not(.//d:para)]]">
    <xsl:call-template name="intersperse-with-zero-spaces">
        <xsl:with-param name="str" select="."/>
    </xsl:call-template>
</xsl:template>