需要选择除其后代之外的特定元素

时间:2014-02-20 15:06:55

标签: xslt

在我的xml中,

<section level="2">
    <heading class="hdgautonum2" level="2">
        <inline style="\-ilx-tab-stops: left blank 0tw; ">
            <gentext type="headingnumberstring">1.5  </gentext>
            <deleted author="Michele Staple" date="Wed, 17 Aug 2011 18:18:00 BST">Overview</deleted>
            <inserted author="Michele Staple" date="Wed, 17 Aug 2011 18:18:00 BST">Chapter summary</inserted>
        </inline>
    </heading>
...
</section>

,在我的xslt中,

<xsl:for-each select="child::section[@level='2']">
<xsl:variable name="subsecHead" select="if (heading//inserted) then (heading//*[not(name()='deleted')]) else heading"/>

注意:我不需要deleted输出,所以,我做了那个例外(我的意思不是())

但是,我有这个错误

  

XPTY0004:不允许包含多个项目的序列作为第一个参数     substring()(“1.5 OverviewSepter summary”,“1.5”,...)

我的目标是,如果标题元素具有heading,则选择deleted元素及其除inserted元素内容以外的所有后代。否则,只需选择heading元素即可。有时,heading元素确实有inserted元素,或者可能不是..

我有道理吗?

1 个答案:

答案 0 :(得分:0)

嗯,这是在黑暗中拍摄的。你可以替换

<xsl:variable name="subsecHead" select="if (heading//inserted) then (heading//*[not(name()='deleted')]) else heading"/>

<xsl:variable name="subsecHead" select="if (heading//inserted) then (heading//* except descendant::deleted) else heading"/>

使用XSL 2.0