2017-06-29 25 views
0

剩余的节点,我有以下XML,分组和移动使用XSLT 1.0

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <case> 
     <CMEDIA>Phone</CMEDIA> 
    </case> 
    <results> 
     <row> 
     <IKEY>TestKey1</IKEY> 
     <OBJECTID>TestObject1</OBJECTID> 
     </row> 
     <row> 
     <IKEY>TestKey1</IKEY> 
     <OBJECTID>TestObject2</OBJECTID> 
     </row> 
     <row> 
     <IKEY>TestKey1</IKEY> 
     <OBJECTID>TestObject3</OBJECTID> 
     </row> 
     <row> 
     <IKEY>TestKey4</IKEY> 
     <OBJECTID>TestObject4</OBJECTID> 
     </row> 
    </results> 
</response> 

我的要求是把所有匹配的<IKEY>行和下一个<row>将它们移动和移动所有<OBJECTID>节点下的新<row>

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <case> 
     <CMEDIA>Phone</CMEDIA> 
    </case> 
    <results> 
     <row> 
     <IKEY>TestKey1</IKEY> 
     <OBJECTID>TestObject1</OBJECTID> 
     <OBJECTID>TestObject2</OBJECTID> 
     <OBJECTID>TestObject3</OBJECTID> 
     </row> 
     <row> 
     <IKEY>TestKey4</IKEY> 
     <OBJECTID>TestObject4</OBJECTID> 
     </row> 
    </results> 
</response> 

我用下面的xsl试图进行分组基于<IKEY>,但我不能够把所有<OBJECTID>节点移动到新的<row>(这里我只使用XSLT 1.0)。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:key name="ikey" match="row" use="string(IKEY)" /> 
    <xsl:template match="results"> 
     <xsl:copy> 
     <xsl:apply-templates select="row[generate-id() = generate-id(key('ikey', string(IKEY))[1])]" mode="ikey" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="row" mode="ikey"> 
     <xsl:choose> 
     <xsl:when test="IKEY"> 
      <row> 
       <xsl:apply-templates select="IKEY|OBJECTID" /> 
      </row> 
     </xsl:when> 
     </xsl:choose> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

有人可以告诉我我在这里失踪了吗?

回答

1

变化

  <xsl:apply-templates select="IKEY|OBJECTID" /> 

  <xsl:apply-templates select="IKEY|key('ikey', IKEY)/OBJECTID" /> 
+0

这是完美的!加一个快速响应。 –