无法知道如何从树中获取值

时间:2016-09-01 19:19:42

标签: xml xslt xslt-2.0

我正在写一个XSL,下面是我的要求。

  1. 当我遇到superscript时,搜索整个XML并查看具有属性覆盖的listitem,而hte值应该等于superscript
  2. 如果找到相同的
  3. 模板

    下面是我的XML

    <?xml version="1.0" encoding="UTF-8"?>
    <division>
    <superscript>1</superscript> 
    <page num="1"/>
            <note role="para-footnote">
                <orderedlist>
                 <listitem override="1">
                            <para>Hi</para>
                 </listitem>
                </orderedlist>
            </note>     
    </division>
    

    这是我的XSL

       <xsl:template match="superscript[name(ancestor::*[last()]) = 'division']">
            <xsl:apply-templates select="//listitem[@override=.]/preceding::page[1]" mode="first"/>
            <xsl:variable name="cnt" select="count(preceding::superscript)+1"/>
            <xsl:variable name="varHeaderNote" select='concat("f",$cnt)'/>
            <xsl:variable name="varFootNote" select='concat("#ftn.",$cnt)'/>
            <sup>
                <a name="{$varHeaderNote}" href="{$varFootNote}" class="tr_ftn">
                    <xsl:value-of select="."/>
                </a>
            </sup>
        </xsl:template>
          <xsl:template match="page" mode="first">
            <xsl:variable name="pb" select="./@num"/>
            <xsl:processing-instruction name="pb">
                <xsl:text>label='</xsl:text>
                <xsl:value-of select="$pb"/>
                <xsl:text>'</xsl:text>
                <xsl:text>?</xsl:text>
            </xsl:processing-instruction>
            <a name="{concat('pg_',$pb)}"/>
        </xsl:template>
    

    我当前的O / p

    <!DOCTYPE html
      PUBLIC "XSLT-compat">
    <hmtl>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>New Version!</title>
       </head>
       <sup><a name="f1" href="#ftn.1" class="tr_ftn">1</a></sup> 
       <page num="1"></page>
        <note role="para-footnote">
          <orderedlist>
             <listitem override="1">
                <para>Hi</para>
             </listitem>
          </orderedlist>
       </note>      
    </hmtl>
    

    预期的O / p:

    <!DOCTYPE html
      PUBLIC "XSLT-compat">
    <hmtl>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>New Version!</title>
       </head>
     <?pb label='1'?>
       <sup><a name="f1" href="#ftn.1" class="tr_ftn">1</a></sup> 
       <page num="1"></page>
        <note role="para-footnote">
          <orderedlist>
             <listitem override="1">
                <para>Hi</para>
             </listitem>
          </orderedlist>
       </note>      
    </hmtl>
    

    这是一个工作小提琴。 http://xsltransform.net/ejivdGR

    请让我知道我哪里出错了,我该如何解决这个问题。

    由于

1 个答案:

答案 0 :(得分:1)

比较谓词中的@override = current(),请参阅http://xsltransform.net/ejivdGR/1

或者更好地定义密钥<xsl:key name="li" match="listitem" use="@override"/>,然后您可以使用key('li', .)查找listitem引用的superscript