【发布时间】:2021-03-04 11:05:22
【问题描述】:
在下面的示例中,我们尝试使用每个“列表项”的“标签”处理嵌套的“列表”:
标签示例:
style="ListNum1" 然后是 a.,b.,c., ... 等等
style="ListNum2" 然后 (1),(2),(3), ... 等等。
style="ListNum3" 然后是 (a),(b),(c), ... 等等。
谁能帮忙。
输入 XML:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<list-item style="ListNum1"><p content-type="new">Your client may (<styled-content style="stat" style-type="Stat-Cal">Prob C §13659</styled-content>) because:</p></list-item>
<list-item style="ListNum2"><p content-type="new">For later income tax purposes</p></list-item>
<list-item style="ListNum3"><p content-type="new">Documents a “stepped-up basis” (<italic>i.e.,</italic> fair.</p></list-item>
<list-item style="ListNum3"><p content-type="new">Provides evidence for your client.</p></list-item>
<list-item style="ListNum2"><p content-type="new">If you or your <bold>client</bold>.</p></list-item>
<list-item style="ListNum1"><p content-type="new">If transfer <italic>unincorporated business</italic> appraisal. <styled-content style="stat" style-type="Stat-Cal">Prob C §13658</styled-content>.</p></list-item>
</body>
预期输出:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<list type="ListNum1">
<list-item style="ListNum1"><label>a.</label><p content-type="new">Your client may (<styled-content style="stat" style-type="Stat-Cal">Prob C §13659</styled-content>) because:</p></list-item>
<list type="ListNum2">
<list-item style="ListNum2"><label>(1)</label><p content-type="new">For later income tax purposes</p>
<list type="ListNum3">
<list-item style="ListNum3"><label>(a)</label><p content-type="new">Documents a “stepped-up basis” (<italic>i.e.,</italic> fair.</p></list-item>
<list-item style="ListNum3"><label>(b)</label><p content-type="new">Provides evidence for your client.</p></list-item>
</list></list-item>
<list-item style="ListNum2"><label>(2)</label><p content-type="new">If you or your <bold>client</bold>.</p></list-item>
</list></list-item>
<list-item style="ListNum1"><label>b.</label><p content-type="new">If transfer <italic>unincorporated business</italic> appraisal. <styled-content style="stat" style-type="Stat-Cal">Prob C §13658</styled-content>.</p></list-item>
</list>
</body>
XSLT 代码:
<?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:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="list-item[@style='ListNum1']">
<xsl:if test="not(preceding-sibling::*[1][self::list-item[@style='ListNum1']])">
<xsl:text disable-output-escaping="yes"><![CDATA[<list list-type="ListNum1">]]></xsl:text>
</xsl:if>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
<xsl:if test="not(following-sibling::*[1][self::list-item[@style='ListNum1']])">
<xsl:text disable-output-escaping="yes"><![CDATA[</list>]]></xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="list-item[@style='ListNum2']">
<xsl:if test="not(preceding-sibling::*[1][self::list-item[@style='ListNum2']])">
<xsl:text disable-output-escaping="yes"><![CDATA[<list list-type="ListNum2">]]></xsl:text>
</xsl:if>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
<xsl:if test="not(following-sibling::*[1][self::list-item[@style='ListNum2']])">
<xsl:text disable-output-escaping="yes"><![CDATA[</list>]]></xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="list-item[@style='ListNum3']">
<xsl:if test="not(preceding-sibling::*[1][self::list-item[@style='ListNum3']])">
<xsl:text disable-output-escaping="yes"><![CDATA[<list list-type="ListNum3">]]></xsl:text>
</xsl:if>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
<xsl:if test="not(following-sibling::*[1][self::list-item[@style='ListNum3']])">
<xsl:text disable-output-escaping="yes"><![CDATA[</list>]]></xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
使用
for-each-group group-starting-with="list-item[@style = 'ListNum' + $level]"使用递归函数,其中level是函数的整数参数。 -
@Martin Honnen - 谢谢,但这里的级别不同,我无法联系到。
标签: xslt xslt-1.0 xquery xslt-2.0 xslt-3.0