0

我想在我的 xslt 中做一个小改动,如下所示。

 <xsl:variable name="sectnum">
    <xsl:number level="any" count="section[(@num and @level ='sect2') or (@level !='sect2' and @level !='sect1') or @level='sect2' or contains(//content-style,'Part')]"/>
        </xsl:variable>

这里实际上我有 para 作为 section/para 的路径,在 para 中我有 para/content-style。我想用包含'Part'的字符串来计算para。请让我知道我该怎么做。上面的变量只为@level 属性提供计数,而不是为 para 部分。

我的 xml 的一部分如下。

  <?xml version="1.0" encoding="UTF-8"?>
<chapter>
<section level="sect2" number-type="manual" num="1.">
            <title>INTRODUCTION</title>
            <para>
                <phrase>1.001</phrase> This part will consider matters relevant to the administration of a deceased's estate from the death to the application for the grant. Chapter 1 will outline some preliminary steps to be taken immediately on obtaining instructions to act. The distinction between testate and intestate succession, and the practical implications of each, will be considered in Chapter 2. Foreign elements, particularly the relevant questions of domicile, the involvement of PRC law, and overseas property, will be noted in Chapter 3. The steps necessary to obtain estate duty clearance (where now necessary) will be briefly considered in Chapter 4. </para>
                </section>
                <section level="sect2">
                    <para>
                    <content-style font-style="bold">Part 1 The deceased person</content-style>
                </para>
                </section>
                </chapter>

第二个场景

    <chapter><section level="sect2">
    <para>
                        <content-style font-style="bold">Part 5 The dependants</content-style>
                    </para></section>
<section level="sect2">
                    <para>Complete the table at Appendix B. </para>
                    <para>
                        <content-style font-style="bold">Part 6 The estate</content-style>
                    </para></section>
    </chapter>

谢谢

4

1 回答 1

0

查看您当前的变量,除非您有错字,否则实际上可以将其简化为以下内容

<xsl:number level="any" count="section[@level !='sect1' or contains(//content-style,'Part')]"/>

但是,我认为您遇到的问题之一是contains。因为您的 xpath 表达式以 开头//,这意味着它相对于顶级文档元素,而不是当前节点,因此只会检查它找到的第一个content-style元素。

此外,如果您只想使用内容样式包含“Part”的para元素来计算section元素,那么您必须像这样扩展它

"... or contains(.//content-style,'Part')] or para[not(.//content-style)]"

注意 contains 开头的句号表示它是相对于当前节点的。

尝试其中任何一个

<xsl:number level="any" 
     count="section[
        (@num and @level ='sect2') 
        or (@level !='sect2' and @level !='sect1') 
        or @level='sect2' 
        or para[not(.//content-style)] 
        or contains(.//content-style,'Part')]"/>

或者

<xsl:number level="any" 
     count="section[
         @level !='sect1' 
         or para[not(.//content-style)]  
         or contains(.//content-style,'Part')]"/>

注意contains开头的句号表示它是相对于当前节点的。

于 2013-06-10T12:48:10.700 回答