2015-11-20 228 views
1

以下是xml代码,我在XSLT的输入中提供了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

你确定,你可以在你的XML找到InventoryItemRef? –

+0

我编辑了xslt – SSN

+0

您的输入不是格式良好的XML(没有单个根元素)。因此,输出不能是你声称的。 –

回答

1

所需输出看起来怪怪的,所以有产生更多converntional输出模板:

<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> 
+0

不,这是**不是结果,不能是结果。 –