【问题标题】:Merging data from two files into one using XSL使用 XSL 将两个文件中的数据合并为一个
【发布时间】:2014-06-18 22:34:00
【问题描述】:

我有两个 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 的新手。

【问题讨论】:

  • 你至少可以自己尝试一下。
  • 我已将 for-each 用于第一个文件及其工作,但无法在第二个文件上应用 foreach。:(
  • 您似乎遗漏了输入中的一些命名空间声明。您还应该向我们展示您的尝试。

标签: xml xslt xslt-1.0 merging-data


【解决方案1】:

我在第二个 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>

【讨论】:

    猜你喜欢
    • 2020-06-16
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多