我是XSL转换的新手,我想将XML A转换为XML B.任何有关在XSLT或xquery中实现这一点的建议。我尝试使用上MSISDN 的for-each-组,但仍无法达到it.Any示例代码以开始与将XML文件平坦化为树状结构分组字段
XML答:
<Output>
<response>
<msisdn>27832007509</msisdn>
<bearer>DATA</bearer>
<comb_charged_units>4223777792</comb_charged_units>
<comb_cnt>288</comb_cnt>
<shared_voice_duration>0</shared_voice_duration>
<shared_data_volume>8728127</shared_data_volume>
<shared_voice_cnt>0</shared_voice_cnt>
<shared_data_cnt>89</shared_data_cnt>
</response>
<response>
<msisdn>27832007509</msisdn>
<bearer>VOICE</bearer>
<comb_charged_units>477792</comb_charged_units>
<comb_cnt>281</comb_cnt>
<shared_voice_duration>17268127877</shared_voice_duration>
<shared_data_volume>0</shared_data_volume>
<shared_voice_cnt>87887</shared_voice_cnt>
<shared_data_cnt>0</shared_data_cnt>
</response>
<response>
<msisdn>27832229588</msisdn>
<bearer>DATA</bearer>
<comb_charged_units>11898</comb_charged_units>
<comb_cnt>33</comb_cnt>
<shared_voice_duration>0</shared_voice_duration>
<shared_data_volume>3445</shared_data_volume>
<shared_voice_cnt>0</shared_voice_cnt>
<shared_data_cnt>78</shared_data_cnt>
</response>
<response>
<msisdn>27832229588</msisdn>
<bearer>VOICE</bearer>
<comb_charged_units>45</comb_charged_units>
<comb_cnt>12</comb_cnt>
<shared_voice_duration>789</shared_voice_duration>
<shared_data_volume>0</shared_data_volume>
<shared_voice_cnt>23</shared_voice_cnt>
<shared_data_cnt>0</shared_data_cnt>
</response>
XML B:
<UsageHistoryResponse>
<usage>
<MSISDN>27832007509</MSISDN>
<CombinedUsage>
<usage_info>
<bearer>DATA</bearer>
<bearer_units>288</bearer_units>
<bearer_units_uom>Sessions</bearer_units_uom>
<bearer_usage>4223777792</bearer_usage>
<bearer_usage_uom>bytes</bearer_usage_uom>
</usage_info>
<usage_info>
<bearer>VOICE</bearer>
<bearer_units>281</bearer_units>
<bearer_units_uom>Calls</bearer_units_uom>
<bearer_usage>477792</bearer_usage>
<bearer_usage_uom>Seconds</bearer_usage_uom>
</usage_info>
</CombinedUsage>
<SharedUsage>
<usage_info>
<bearer>DATA</bearer>
<bearer_units>89</bearer_units>
<bearer_units_uom>Sessions</bearer_units_uom>
<bearer_usage>8728127</bearer_usage>
<bearer_usage_uom>bytes</bearer_usage_uom>
</usage_info>
<usage_info>
<bearer>VOICE</bearer>
<bearer_units>87887</bearer_units>
<bearer_units_uom>Calls</bearer_units_uom>
<bearer_usage>17268127877</bearer_usage>
<bearer_usage_uom>Seconds</bearer_usage_uom>
</usage_info>
</SharedUsage>
</usage>
<usage>
<MSISDN>27832229588</MSISDN>
<CombinedUsage>
<usage_info>
<bearer>DATA</bearer>
<bearer_units>33</bearer_units>
<bearer_units_uom>Sessions</bearer_units_uom>
<bearer_usage>11898</bearer_usage>
<bearer_usage_uom>bytes</bearer_usage_uom>
</usage_info>
<usage_info>
<bearer>VOICE</bearer>
<bearer_units>12</bearer_units>
<bearer_units_uom>Calls</bearer_units_uom>
<bearer_usage>45</bearer_usage>
<bearer_usage_uom>Seconds</bearer_usage_uom>
</usage_info>
</CombinedUsage>
<SharedUsage>
<usage_info>
<bearer>DATA</bearer>
<bearer_units>78</bearer_units>
<bearer_units_uom>Sessions</bearer_units_uom>
<bearer_usage>3445</bearer_usage>
<bearer_usage_uom>bytes</bearer_usage_uom>
</usage_info>
<usage_info>
<bearer>VOICE</bearer>
<bearer_units>23</bearer_units>
<bearer_units_uom>Calls</bearer_units_uom>
<bearer_usage>789</bearer_usage>
<bearer_usage_uom>Seconds</bearer_usage_uom>
</usage_info>
</SharedUsage>
</usage>
我的想法是首先对msisdn进行分组,然后遍历int它的领域。下面是我尝试
<xsl:template match="/">
<tns:UsageHistoryResponse>
<xsl:for-each select="/Output/response">
<tns:usage>
<xsl:for-each-group select="." group-by="ns0:msisdn">
<tns:MSISDN>
<xsl:value-of select="current-grouping-key()"/></tns:MSISDN>
</xsl:for-each-group>
</tns:usage>
</xsl:for-each>
</tns:UsageHistoryResponse>
</xsl:template>
“*我尝试在msisdn上使用for-each-group *”发布您的尝试,以便我们可以修复它,而不必从头开始为您编写代码。 –
编辑问题 –