使用XSL将两个文件中的数据合并为一个

时间:2014-06-18 12:12:27

标签: xml xslt xslt-1.0 merging-data

我有两个XML文件,我试图使用xsl合并一些元素。

XML1:

<ALL xmlns:a="http://example.com/ns1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<a:BusinessUnit>
    <a:businessUnitCode>SGS</a:businessUnitCode>
    <a:longName>Singapore Global Sourcing</a:longName>
    <a:parentBusinessUnitCode>CGS</a:parentBusinessUnitCode>
</a:BusinessUnit>
<a:BusinessUnit>
    <a:businessUnitCode>EGH</a:businessUnitCode>
    <a:longName>EMS Global HQ</a:longName> 
    <a:parentBusinessUnitCode xsi:nil="true"/>
</a:BusinessUnit> 

XML2:

<Get_ProductFamily xmlns:aa="http://example.com/ns2">
<aa:ProductFamily>
               <aa:integrationId>2323</aa:integrationId>
               <aa:parentBusinessUnitCode>EGH</aa:parentBusinessUnitCode>        
 </aa:ProductFamily>
 <aa:ProductFamily>
               <aa:integrationId>3434</aa:integrationId>                  
               <aa:parentBusinessUnitCode>CGS</aa:parentBusinessUnitCode>        
 </aa:ProductFamily>
  <aa:ProductFamily>
               <aa:integrationId>4545</aa:integrationId>                  
               <aa:parentBusinessUnitCode>CDD</aa:parentBusinessUnitCode>        
 </aa:ProductFamily>
 </Get_ProductFamily>

输出:

<GroupList>
    <Group>
    <Name>EGH - EMS Global HQ</Name>
    <ProductLineList>
    <ProductLine>
    <Name>EGH</Name>
        <CODE>2323</CODE>
    </ProductLine>
    </ProductLineList>
    </Group>
<GroupList>

我想从第一个文件读取业务单位数据,从第二个文件读取产品系列数据并生成组信息。

步骤是: 阅读所有业务部门

组名是a:businessUnitCode和a:longName(我做过这部分)的串联

当a:parentBusinessUnitCode为空时,读取其a:businessUnitCode,在第二个文件中搜索此businessUnitCode。

如果a:businessUnitCode(第一个文件)等于aa:parentBusinessUnitCode(第二个文件)  然后打印其集成ID。

请帮助我,因为我是xsl的新手。

1 个答案:

答案 0 :(得分:0)

我在第二个XML中搜索bussinessUnitCode并显示相应的数据。注意我使用document()函数来读取第二个XML。           

<xsl:template match="/">
<GroupList>
 <Group>
 <xsl:apply-templates/>
</Group>
</GroupList>
</xsl:template>
<xsl:template match="a:BusinessUnit">
 <xsl:variable name="businessCode" select="a:businessUnitCode"/>
 <Name>
 <xsl:value-of select="$businessCode"/> - <xsl:value-of select="a:longName"/>
 </Name>
  <xsl:if test="a:parentBusinessUnitCode[@i:nil='true']">
  <ProductLineList>
  <xsl:for-each select=
  "document('XML2.xml')/Get_ProductFamily/aa:ProductFamily">
  <xsl:if test="aa:parentBusinessUnitCode = $businessCode">
  <ProductLine>
   <Name><xsl:value-of select="$businessCode"/></Name>

   <CODE><xsl:value-of select="aa:integrationId"/></CODE>
   </ProductLine></xsl:if>
 </xsl:for-each>
 </ProductLineList>
  </xsl:if>
 </xsl:template>
 </xsl:stylesheet>