xslt - 如何使范围部分属性“特定用途”值 - XSLT
问题描述
我正在尝试对specific-use
单个 para 元素中的范围部分属性进行编号。我正在获取单个值<span style="case">
并group-by
获取值group-by="ancestor::sec[1]"
。当<span style="case">
值继续时是否可以使范围继续descendant::
,或者following-sibling::
我们可以获取最后一个specific-use
值。
输入 XML
<book>
<sec disp-level="1" specific-use="1">
<p>aaaaaa</p>
<sec disp-level="2" specific-use="2">
<p><span style="case">super</span></p>
</sec>
<sec disp-level="2" specific-use="3">
<blockquote>
<p><span style="case">super</span></p>
</blockquote>
</sec>
<sec disp-level="2" specific-use="4">
<p><span style="case">super</span></p>
</sec>
</sec>
<sec disp-level="1" specific-use="5">
<p><span style="case">super</span>, <span style="case">active</span></p>
<sec disp-level="2" specific-use="6">
<p><span style="case">active</span></p>
</sec>
</sec>
<sec disp-level="1" specific-use="7">
<p><span style="case">active</span></p>
<sec disp-level="2" specific-use="8">
<p><span style="case">active</span></p>
</sec>
<sec disp-level="2" specific-use="9">
<p><span style="case">super</span></p>
</sec>
<sec disp-level="2" specific-use="10">
<p><span style="case">active</span></p>
</sec>
</sec>
XSLT 代码
<xsl:template match="book">
<xsl:copy>
<xsl:for-each-group select="//*" group-by="span[@style='case']">
<xsl:text>
</xsl:text>
<p>
<case><xsl:value-of select="current-grouping-key()"/></case><xsl:text> </xsl:text>
<sec>
<xsl:for-each select="current-group()">
<number>
<xsl:value-of select="ancestor::sec[1]/@specific-use"/>
</number>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</sec>
</p>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
我的 XSLT 给定输出 https://xsltfiddle.liberty-development.net/3NSTbfj/7
我的预期输出
<book>
<p><case>super</case> <sec><number>2</number>–<number>4</number>, <number>5</number>, <number>9</number></sec></p>
<p><case>active</case> <sec><number>5</number>–<number>8</number>, <number>10</number></sec></p>
</book>
例如:
超级 2–4, 5, 9
活跃 5–8, 10
2–4
:创建范围因为<span style="case">super</span>
搜索继续相同的值child::
或following-sibling::
。
5–8
:创建范围因为<span style="case">active</span>
搜索继续相同的值child::
或following-sibling::
。
解决方案
推荐阅读
- oauth-2.0 - 在 JHipster 中使用 Keycloak 扩展用户实体
- javascript - 如何限制鼠标点击复选框并从JS触发?
- excel - 如何创建一个 VBA 函数,该函数将从 excel 中选择值并“可拖动”(即基于活动单元格将具有不同的输入)
- c# - 如何生成长度小于/大于长度的字符串
- android - 设备处于空闲模式时不调用位置结果回调
- ios - 使用 Braintree SDK 在 Paypal 结帐中添加运费
- opencv - 从 OpenCv 图像比较中获取比较分数
- java - 使用 java 8 查找列表中重复次数最多的短语
- node.js - 如何使用来自另一个集合的数据创建文档?
- mysql - 如何在 WHERE 中使用 NULL 列?