标签内的子列表格式文本作为属性 [英] Sublist format text inside label as attributes

查看:15
本文介绍了标签内的子列表格式文本作为属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在para中添加标签作为属性值:

I want to add the label inside para as attribute value:

我的源xml:

<body>
<p>blahblah</p>
<ul outputclass="l1">
<li outputclass="lt1">(a) blahblah</li>
<li outputclass="lt1">(b) blahblah</li>
<li outputclass="lt1">(c) blahblah
  <ul outputclass="l2">
  <li outputclass="lt2">      (1) blahblah</li>
  <li outputclass="lt2">      (2) blahblah<fn><p>blah</p></fn></li>
  <li outputclass="lt2">      (3) blahblah
    <ul outputclass="l3">
    <li outputclass="lt3">              (i) blahblah<fn><p>blah</p></fn></li>
    <li outputclass="lt3">              (ii) blahblah</li>
    <li outputclass="lt3">              (iii) blahblah</li>
    </ul></li>
  </ul></li>
<li outputclass="lt1">(d) blahblah</li>
<li outputclass="lt1">(e) 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="@* | 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>

输出我在标签内得到 para:

output i am getting para inside labels:

<body>
<para>blahblah</para>
<itemizedlist type="normal">
<item><para>(a) blahblah</para></item>
<item><para>(b) blahblah</para></item>
<item><para>(c) blahblah</para>
  <itemizedlist type="normal">
  <item><para>      (1) blahblah</para></item>
  <item><para>      (2) blahblah</para></item>
  <item><para>      (3) blahblah<footnote><para>blah</para></footnote></para>
    <itemizedlist type="normal">
    <item><para>              (i) blahblah<footnote><para>blah</para></footnote></para></item>
    <item><para>              (ii) blahblah</para></item>
    <item><para>              (iii) blahblah</para></item>
    </itemizedlist></item>
  </itemizedlist></item>
<item><para>(d) blahblah</para></item>
<item><para>(e) blahblah</para></item>
</itemizedlist>
<para>blahblah</para>
</body>

但需要输出像 para 内的标签值,如 'A.或 (A) 或 A) 或 a) 或 (a) 或 a.或 i) 或 (i) 或 i.必须删除并添加为项目标签属性 num 值,如下所示:

but needed output as like para inside label values like 'A. or (A) or A) or a) or (a) or a. or i) or (i) or i.' have to be removed and add as item tag attribute num value as shown below :

<body>
<para>blahblah</para>
<itemizedlist type="normal">
<item num="(a)"><para>blahblah</para></item>
<item num="(b)"><para>blahblah</para></item>
<item num="(c)"><para>blahblah</para>
  <itemizedlist type="normal">
  <item num="(1)"><para>blahblah</para></item>
  <item num="(2)"><para>blahblah</para></item>
  <item num="(3)"><para>blahblah<footnote><para>blah</para></footnote></para>
    <itemizedlist type="normal">
    <item num="(i)"><para>blahblah<footnote><para>blah</para></footnote></para></item>
    <item num="(ii)"><para>blahblah</para></item>
    <item num="(iii)"><para>blahblah</para></item>
    </itemizedlist></item>
  </itemizedlist></item>
<item num="(d)"><para>blahblah</para></item>
<item num="(e)"><para>blahblah</para></item>
</itemizedlist>
<para>blahblah</para>
</body>

请给我推荐

提前致谢.

推荐答案

<?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="if(self::text()) then('text') else(generate-id())">
                <xsl:choose>
                    <xsl:when test="self::ul">
                        <xsl:apply-templates select="current-group()"/>
                    </xsl:when>
                    <xsl:when test="current-grouping-key() =  'text' and position() = 1">
                        <xsl:attribute name="num" select="tokenize(normalize-space(current-group()), ' ')[1]"/>
                        <para>
                            <xsl:value-of select="string-join(tokenize(normalize-space(current-group()), ' ')[position() > 1], ' ')"/>
                        </para>
                    </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>

这篇关于标签内的子列表格式文本作为属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆