首页 > 解决方案 > 在 xslt 中映射 xml 元素的最佳方法

问题描述

我有以下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>

提前致谢 !!

标签: xmlxslt-1.0xslt-2.0exslt

解决方案


这应该适合你。仅供参考:我必须清理您发布的 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>

推荐阅读