0

我有两个 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(1st file) 等于 aa:parentBusinessUnitCode(2nd file),则打印其集成 ID。

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

4

1 回答 1

0

我在第二个 XML 中搜索了 businessUnitCode 并显示了相应的数据。请注意,我使用 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>
于 2014-06-18T14:19:12.460 回答