移動匹配的行的其餘節點我有以下輸入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>
<OBJECTPHYFILEID>ObjPhyField1</OBJECTPHYFILEID>
</row>
<row>
<IKEY>TestKey1</IKEY>
<OBJECTID>TestObject2</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField2</OBJECTPHYFILEID>
</row>
<row>
<IKEY>TestKey1</IKEY>
<OBJECTID>TestObject3</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField3</OBJECTPHYFILEID>
</row>
<row>
<IKEY>TestKey4</IKEY>
<OBJECTID>TestObject4</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField4</OBJECTPHYFILEID>
</row>
</results>
</response>
我的要求是將所有的匹配<IKEY>
行&一個<row>
下拖曳移動並移動<OBJECTID>
& <OBJECTPHYFILEID>
節點存在於匹配的<IKEY>
行(即在同一行中)在該新節點<SourceInstance>
下。最後,我的輸出XML應該如下:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<case>
<CMEDIA>Phone</CMEDIA>
</case>
<results>
<row>
<IKEY>TestKey1</IKEY>
<Sources>
<SourceInstance>
<OBJECTID>TestObject1</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField1</OBJECTPHYFILEID>
</SourceInstance>
<SourceInstance>
<OBJECTID>TestObject2</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField2</OBJECTPHYFILEID>
</SourceInstance>
<SourceInstance>
<OBJECTID>TestObject3</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField3</OBJECTPHYFILEID>
</SourceInstance>
</Sources>
</row>
<row>
<IKEY>TestKey4</IKEY>
<Sources>
<SourceInstance>
<OBJECTID>TestObject4</OBJECTID>
<OBJECTPHYFILEID>ObjPhyField4</OBJECTPHYFILEID>
</SourceInstance>
</Sources>
</row>
</results>
</response>
我用下面的XSLT嘗試,但未能達到預期的xml:
<?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>
<IKEY>
<xsl:value-of select="//IKEY" />
</IKEY>
<Sources>
<xsl:for-each select="OBJECTID">
<SourceInstance>
<xsl:value-of select="//key('ikey', IKEY)/OBJECTID" />
</SourceInstance>
</xsl:for-each>
</Sources>
</row>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我相信,我在這裏失去了一些東西。有人可以幫我嗎?
哪裏' ObjPhyField3 OBJECTPHYFILEID>'數據從何而來? –
@馬丁Honnen,我很抱歉沒有添加正確的輸入xml的問題。我現在添加了它。你現在可以看到' ObjPhyField3 OBJECTPHYFILEID>'。 –