XSLT:将模板应用于不包含特定子节点的节点
我正在使用 docbook 并使用一个模板,该模板将零宽度字符插入到我的表条目中。这很好,但如果表条目包含
元素,我需要应用模板NOT。那么,有没有一种方法可以将模板应用于所有不包含
的
?
<?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>
...
I'm using docbook and am using a template which inserts zero-width characters into my table entries. Which is good, but I need to have the template NOT applied if the table entry includes a <para>
element. So, is there a way I can apply the template to all <entry>
that do not contain a <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>
...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
匹配不包含任何para
entry 元素> 儿童。
匹配不包含任何para 的任何
entry
元素后代。或者对于您发布的模板,您可以使用
。<xsl:template match="d:entry[not(d:para)]">
matches anyentry
elements not having anypara
children.<xsl:template match="d:entry[not(descendant::d:para)]">
matches anyentry
elements not having anypara
descendants.Or for your posted template you could use
<xsl:template match="text()[parent::d:entry[not(d:para)]]">
.