比较xslt中两个xml的数据



我是XSL的新手。因此,请帮助我与以下。我有2个xml。我必须在XSL转换中执行以下操作。

如果Employee/EmployeeInfo/FirstName = EmployeeSegment/EmployeeSummary/GivenName和Employee/EmployeeInfo/LastName = EmployeeSegment/EmployeeSummary/姓氏employeeId = employeessegment/EmployeeSummary/EmpId

XML1

<Employee>
  <EmployeeInfo>
    <FirstName>ABC</FirstName>
    <LastName>DEF</LastName>
  </EmployeeInfo>
</Employee>

XML2

<EmployeeSegment>
  <EmployeeSummary>
    <EmpId>1234</EmpId>
    <GivenName>ABC</GivenName>
    <Surname>DEF</Surname>
  </EmployeeSummary>
</EmployeeSegment> 

我试过以下方法。

<xsl:param name="cjEmployeeSegment" select="document('CJ_Response.xml')"/>
<xsl:for-each select="/ns3:Employee/ns3:EmployeeInfo">
  <xsl:variable name="empFirstName">
      <xsl:value-of select="ns1:FirstName"/>
  </xsl:variable>
  <xsl:variable name="empLastName">
      <xsl:value-of select="ns1:LastName"/>
  </xsl:variable>
  <xsl:for-each select="$cjEmployeeSegment/v32:EmployeeSegment/v31:EmployeeSummary">
    <xsl:if test="$empFirstName=v31:GivenName and $empLastName=v31:Surname">
      <ns12:EmployeeIdentifier>
        <ns12:EmployeeID>
          <xsl:value-of select="v31:EmpId"/>
        </ns12:EmployeeID>
      </ns12:EmployeeIdentifier>
    </xsl:if>
  </xsl:for-each>
</xsl:for-each> 

假设您正在处理以下输入:

XML>
<Employee>
  <EmployeeInfo>
    <FirstName>ABC</FirstName>
    <LastName>DEF</LastName>
  </EmployeeInfo>
</Employee>

还有另一个XML文档名为CJ_Response.xml:

<EmployeeSegment>
  <EmployeeSummary>
    <EmpId>1234</EmpId>
    <GivenName>ABC</GivenName>
    <Surname>DEF</Surname>
  </EmployeeSummary>
</EmployeeSegment> 

可以使用下面的样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="cj_Response" select="document('CJ_Response.xml')"/>
<xsl:template match="/Employee">
    <root>
        <xsl:for-each select="EmployeeInfo">
            <xsl:variable name="lookup" select="$cj_Response/EmployeeSegment/EmployeeSummary[GivenName = current()/FirstName and Surname = current()/LastName]" />
            <xsl:if test="$lookup">
                <EmployeeIdentifier>
                    <EmployeeID>
                        <xsl:value-of select="$lookup/EmpId"/>
                    </EmployeeID>
                </EmployeeIdentifier>
            </xsl:if>
        </xsl:for-each>
    </root>
</xsl:template>
</xsl:stylesheet>

返回:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <EmployeeIdentifier>
      <EmployeeID>1234</EmployeeID>
   </EmployeeIdentifier>
</root>

当然,如果有两个或更多的员工使用相同的名字,这将失败。

相关内容

  • 没有找到相关文章

最新更新