在xslt中映射xml元素的最佳方法

问题描述 投票:0回答:1

我具有以下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 xslt-1.0 xslt-2.0 exslt
1个回答
0
投票

这应该为您工作。仅供参考:我必须清理您发布的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>
© www.soinside.com 2019 - 2024. All rights reserved.