代码之家  ›  专栏  ›  技术社区  ›  User515

需要在结束段和项目之间添加子列表,并在结束段内添加脚注

  •  1
  • User515  · 技术社区  · 8 年前

    我想在项目内添加子列表,在列表段落内添加脚注文本:

    我的源xml:

    <body>
    <p>blahblah</p>
    <ul outputclass="l1">
    <li outputclass="lt1">blahblah</li>
    <li outputclass="lt1">blahblah</li>
    <li outputclass="lt1">blahblah
      <ul outputclass="l2">
      <li outputclass="lt2">blahblah</li>
      <li outputclass="lt2">blahblah<fn><p>blah</p></fn></li>
      <li outputclass="lt2">blahblah
        <ul outputclass="l3">
        <li outputclass="lt3">blahblah<fn><p>blah</p></fn></li>
        <li outputclass="lt3">blah<fn><p>blah</p></fn>blah</li>
        <li outputclass="lt3">blahblah</li>
        </ul></li>
      </ul></li>
    <li outputclass="lt1">blahblah</li>
    <li outputclass="lt1">blahblah</li>
    </ul>
    <p>blahblah</p>
    </body>
    

    myxslt

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
    
        <xsl:template match="p">
            <para>
                <xsl:apply-templates/>
            </para>
        </xsl:template>
    
        <xsl:template match="ul[@outputclass='l1']">
            <itemizedlist type="&#x2022;">
                <xsl:apply-templates/>
            </itemizedlist>
        </xsl:template>
    
        <xsl:template match="ul[@outputclass='l2']">
            <itemizedlist type="&#x2022;">
                <xsl:apply-templates/>
            </itemizedlist>
        </xsl:template>
    
        <xsl:template match="ul[@outputclass='l3']">
            <itemizedlist type="&#x2022;">
                <xsl:apply-templates/>
            </itemizedlist>
        </xsl:template>
    
        <xsl:template match="li[@outputclass='lt1']">
            <item>
                <xsl:apply-templates/>
            </item>
        </xsl:template>
    
        <xsl:template match="li[@outputclass='lt2']">
            <item>
                <xsl:apply-templates/>
            </item>
        </xsl:template>
    
        <xsl:template match="li[@outputclass='lt3']">
            <item>
                <xsl:apply-templates/>
            </item>
        </xsl:template>
    
        <xsl:template match="li/text()[normalize-space()]">
            <para>
                <xsl:value-of select="."/>
            </para>
        </xsl:template>
    
    </xsl:stylesheet>
    

    <body>
    <para>blahblah</para>
    <itemizedlist type="&#x2022;">
    <item><para>blahblah</para></item>
    <item><para>blahblah</para></item>
    <item><para>blahblah</para>
      <itemizedlist type="&#x2022;">
      <item><para>blahblah</para></item>
      <item><para>blahblah</para><footnote><para>blah</para></footnote></item>
      <item><para>blahblah</para>
        <itemizedlist type="&#x2022;">
        <item><para>blahblah</para><footnote><para>blah</para></footnote></item>
        **<item><para>blah</para><footnote><para>blah</para></footnote><para>blah</para></item>**
        <item><para>blahblah</para></item>
        </itemizedlist></item>
      </itemizedlist></item>
    <item><para>blahblah</para></item>
    <item><para>blahblah</para></item>
    </itemizedlist>
    <para>blahblah</para>
    </body>
    

    <body>
    <para>blahblah</para>
    <itemizedlist type="&#x2022;">
    <item><para>blahblah</para></item>
    <item><para>blahblah</para></item>
    **<item><para>blahblah</para>**
      <itemizedlist type="&#x2022;">
      <item><para>blahblah</para></item>
      <item><para>blahblah</para></item>
      **<item><para>blahblah<footnote><para>blah</para></footnote></para>**
        <itemizedlist type="&#x2022;">
        <item><para>blahblah<footnote><para>blah</para></footnote></para></item>
        **<item><para>blah<footnote><para>blah</para></footnote>blah</para></item>**
        <item><para>blahblah</para></item>
        **</itemizedlist></item>**
      **</itemizedlist></item>**
    <item><para>blahblah</para></item>
    <item><para>blahblah</para></item>
    </itemizedlist>
    <para>blahblah</para>
    </body>
    

    如果可能的话,请建议我

    提前谢谢。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Martin Honnen    8 年前

    您还没有真正解释将节点包装到哪些标准中 para ,这是一个使用 for-each-group group-adjacent="boolean(self::ul)" ul 元素到 对位

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        exclude-result-prefixes="xs"
        version="2.0">
    
        <xsl:template match="@* | node()" mode="#all">
            <xsl:copy>
                <xsl:apply-templates select="@* | node()" mode="#current"/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="p">
            <para>
                <xsl:apply-templates/>
            </para>
        </xsl:template>
    
        <xsl:template match="ul[@outputclass='l1'] | ul[@outputclass='l2'] | ul[@outputclass='l3']">
            <itemizedlist type="&#x2022;">
                <xsl:apply-templates/>
            </itemizedlist>
        </xsl:template>
    
        <xsl:template match="li[@outputclass='lt1'] | li[@outputclass='lt2'] | li[@outputclass='lt3']">
            <item>
                <xsl:for-each-group select="node()" group-adjacent="boolean(self::ul)">
                    <xsl:choose>
                        <xsl:when test="current-grouping-key()">
                            <xsl:apply-templates select="current-group()"/>
                        </xsl:when>
                        <xsl:otherwise>
                            <para>
                                <xsl:apply-templates select="current-group()" mode="preserve"/>
                            </para>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:for-each-group>
            </item>
        </xsl:template>
    
    </xsl:stylesheet>