xml - 基于属性值的 XSLT 2.0 group-adjacent
问题描述
我正在尝试使用 XSLT 生成 XML,我想在两个连续节点的属性值为 Position="A" 时生成一个字符串,我想在字符串中添加一个连字符(-),否则我想连接节点值. 我尝试将 group-adjacent 与属性值一起使用,但它在空属性节点上失败。我尝试为属性值添加 string(),但没有奏效。
<xsl:variable name="columnId">
<xsl:for-each-group select="CabinLayout/Columns" group-adjacent="string(@Position)">
<xsl:value-of select="current-group()"/>
</xsl:for-each-group>
</xsl:variable>
<ColumnID><xsl:value-of select="translate($columnId,' ','-')"/></ColumnID>
以下是示例输入和所需输出
<CabinLayout>
<Columns Position="W">A</Columns>
<Columns>B</Columns>
<Columns Position="A">C</Columns>
<Columns Position="A">D</Columns>
<Columns>E</Columns>
<Columns Position="W">F</Columns>
</CabinLayout>
输出 - ABC-DEF
<CabinLayout>
<Columns Position="W">A</Columns>
<Columns>B</Columns>
<Columns>C</Columns>
<Columns Position="A">D</Columns>
<Columns>E</Columns>
<Columns>F</Columns>
<Columns>G</Columns>
<Columns>H</Columns>
<Columns>J</Columns>
<Columns Position="W">K</Columns>
</CabinLayout>
输出:ABCDEFGHJK
<CabinLayout>
<Columns Position="W">A</Columns>
<Columns>B</Columns>
<Columns Position="A">C</Columns>
<Columns Position="A">D</Columns>
<Columns>E</Columns>
<Columns>F</Columns>
<Columns Position="A">G</Columns>
<Columns Position="A">H</Columns>
<Columns>J</Columns>
<Columns Position="W">K</Columns>
</CabinLayout>
输出:ABC-DEFG-HJK
解决方案
我认为以下group-ending-with
解决了这个问题:
<xsl:template match="CabinLayout">
<ColumnID>
<xsl:value-of separator="-">
<xsl:for-each-group select="Columns" group-ending-with="Columns[@Position = 'A' and following-sibling::Columns[1][@Position = 'A']]">
<xsl:sequence select="string-join(current-group(), '')"/>
</xsl:for-each-group>
</xsl:value-of>
</ColumnID>
</xsl:template>
推荐阅读
- javascript - React 项目 - Moment Timezone 没有欧洲/伦敦的数据
- javascript - OpenLayers:编辑坐标只需在 div 中单击以更改值(使地图居中)
- node.js - 使用 Node.js 从 AWS Lambda 函数生成唯一主键的安全方法
- azure - Azure CDN Verizon Premium 隐藏 SAS 令牌 GET 方法错误 403
- authentication - 通过 2 个公共 URL 公开的 Keycloak 服务器
- r - 从年龄分组的人口数据中截断负二项分布
- angular - 从 Angular 上传图片
- tensorflow - 如何在张量流中访问自定义子类中的图层
- java - 打印多个 Primefaces Chart.js
- reactjs - 函数内部的 Jest 模拟函数