2017-06-29 140 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

這是完美的!加一個快速響應。 –