我具有以下xml格式。
<Floorplan IDValue="123" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
</Floorplan>
<Floorplan IDValue="456" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
</Floorplan>
<unit id = abc1 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc2 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc3 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc4 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
基于单位的平面图ID的值,我想将它们映射到平面图并生成以下格式的xml。使用xslt可以做到这一点吗?什么是最好的方法?我不确定我是否以更好的方式解释了我的问题,但示例应该做到这一点。
<Floorplan IDValue="123" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
<unit id = abc1 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc2 floorplanid = 123>
<unitinfo>info</unitinfo>
<unit>
</Floorplan>
<Floorplan IDValue="456" IDType="FloorplanID" IDRank="primary">
<FloorplanInfo>info<FloorplanInfo>
<unit id = abc3 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
<unit id = abc4 floorplanid = 456>
<unitinfo>info</unitinfo>
<unit>
</Floorplan>
提前感谢!
这应该为您工作。仅供参考:我必须清理您发布的XML,因为它的格式不正确。
<xsl:key name="myKey" match="unit" use="@floorplanid"/>
<xsl:template match="Floorplan">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<xsl:apply-templates select="key('myKey', @IDValue)" mode="unitMode"/>
</xsl:copy>
</xsl:template>
<!-- Suppress unit current nodes. -->
<xsl:template match="unit"/>
<!-- Use mode to add the new unit nodes. -->
<xsl:template match="unit" mode="unitMode">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Identity template. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>