2017-06-29 18 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>行で、1 <row>とその新しい<row>の下にあるすべての<OBJECTID>のノードを移動下に移動します。

<?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> 

私は<IKEY>に基づいてグループ化するために、次のXSLをしようとしていますが、私は(ここで私は唯一のXSLT 1.0を使用する必要があります)新しい<row>にすべて<OBJECTID>のノードを移動することはできませんよ。

<?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|key('ikey', IKEY)/OBJECTID" /> 
+0

に変更

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

は、それは完璧です!迅速な対応のためにプラス1。 –

関連する問題