下面是我所拥有的xml代码,在输入XSLT时,提供了XSLT代码,并且我提供了预期的输出和区域。这是关于资产和相应基准表的示例。
<BaseMeter>
<MeterName>Meter description</MeterName>
<MeterCode>Meter1</MeterCode>
<ASSETID>
<Name>Airco Unit</Name>
<Code>ID1</Code>
</ASSETID>
</BaseMeter>
<BaseMeter>
<MeterName>Meter description</MeterName>
<MeterCode>Meter2</MeterCode>
<ASSETID>
<Name>Airco Unit</Name>
<Code>ID1</Code>
</ASSETID>
</BaseMeter>
转换的XML应如下所示。通过xslt实际转换的xml代码也在下面提供。
<Asset>
AssetID
AssetName
<Meter>
MeterID (eg. Meter 1)
MeterName
<Meter>
<Meter>
MeterID (eg. Meter 2)
MeterName
<Meter>
我使用了下面的XSLT
<xsl:template match="/">
<xsl:for-each-group select="BaseMeter" group-by="AssetID/Code">
<Asset ID="{current-grouping-key()}">
<xsl:copy-of select="current-group()"/>
</Asset>
</xsl:for-each-group>
</xsl:template>
输出就是这样,但是资产ID和名称再次被捕获为资产标记的子项,如何删除它们以使它们不出现在输出中或转换为xml enter code here
<Asset ID="000244">
<BaseMeter>
<MeterName>Meter Name</MeterName>
<MeterCode>0040</MeterCode>
<AssetID>
<Name>Airco Unit</Name>
<Code>000244</Code>
</AssetID>
</BaseMeter>
这是我面临的问题..如果有人可以帮助我,那将是非常好的。我已经使用group by而无法破解如何删除再次出现的资产ID。
答案 0 :(得分:1)
您想要的输出看起来很奇怪,因此有一个模板可以产生更多的计算输出:
<xsl:template match="/">
<xsl:for-each-group select="BaseMeter" group-by="ASSETID/Code">
<Asset ID="{current-grouping-key()}">
<xsl:for-each select="current-group()">
<Meter>
<xsl:copy-of select="MeterName|MeterCode"/>
</Meter>
</xsl:for-each>
</Asset>
</xsl:for-each-group>
</xsl:template>
结果:
<Asset ID="ID1">
<Meter>
<MeterName>Meter description</MeterName>
<MeterCode>Meter1</MeterCode>
</Meter>
<Meter>
<MeterName>Meter description</MeterName>
<MeterCode>Meter2</MeterCode>
</Meter>
</Asset>