使用 XSLT 合并具有相同 ID 及其值的节点 (XML)

Combine Nodes (XML) with the same ID and their values using XSLT

我是 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>

任何人都可以指出我正确的方向吗?提前谢谢你。

看来您需要分两级进行分组:

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>