使用 XSLT 组合具有相同 ID 及其值的节点 (XML)
Posted
技术标签:
【中文标题】使用 XSLT 组合具有相同 ID 及其值的节点 (XML)【英文标题】:Combine Nodes (XML) with the same ID and their values using XSLT 【发布时间】:2021-12-29 03:56:04 【问题描述】:我是 XSLT 的新手,我还在学习。我目前面临一个问题,我需要组合具有相同 ID 的节点。 ID相同的节点会有不同的值,这些值也需要组合起来。
下面是我的初始示例 XML:
<OBR>
<row>
<ID>T084</ID>
<col2>Y</col2>
<col3></col3>
<col4></col4>
</row>
<row>
<ID>T084</ID>
<col2></col2>
<col3>Y</col3>
<col4></col4>
</row>
<row>
<ID>123456</ID>
<col2></col2>
<col3>Y</col3>
<col4></col4>
</row>
</OBR>
鉴于我需要用“N”填充空值,我的期望输出将是:
<OBR>
<row>
<ID>T084</ID>
<col2>Y</col2>
<col3>Y</col3>
<col4>N</col4>
</row>
<row>
<ID>125659</ID>
<col2>N</col2>
<col3>Y</col3>
<col4>N</col4>
</row>
</OBR>
谁能指出我正确的方向?提前谢谢你。
【问题讨论】:
查看任何关于分组的介绍和示例,例如此站点上的***.com/tags/xslt-grouping/info,然后用一些代码尝试一下。如果您遇到问题,请发布详细信息(最少但完整的 XML 和 XSLT、您想要的输出、您获得的错误或错误输出)以及有关使用的 XSLT 处理器的信息。 【参考方案1】:看来您需要在两个级别上进行分组:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/OBR">
<xsl:copy>
<xsl:for-each-group select="row" group-by="ID">
<xsl:copy>
<xsl:for-each-group select="current-group()/*" group-by="name()">
<xsl:element name="current-grouping-key()">
<xsl:value-of select="(current-group()/text(), 'N')[1]"/>
</xsl:element>
</xsl:for-each-group>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
【讨论】:
以上是关于使用 XSLT 组合具有相同 ID 及其值的节点 (XML)的主要内容,如果未能解决你的问题,请参考以下文章
如何合并具有“相同父亲”、相同方法和相同 id=0 的两个节点(使用 XSLT)?
使用 XSLT 将具有相同 ID 的元素 (XML) 合并到 txt 文件
在 XSLT 中,如何使用存在多个相同节点的 ID 从节点中选择一个值?