【发布时间】:2021-02-04 01:41:05
【问题描述】:
**我需要比较两个合并的 XML,但下面的代码不起作用。 **
XML:
<File>
<wd:Report_Data xmlns:wd="urn:com.workday.report/CR">
<wd:Report_Entry>
<wd:Worker>Bal Shil (1234)</wd:Worker>
<wd:Employee_ID>1234</wd:Employee_ID>
<wd:User_Name>bal</wd:User_Name>
<wd:ReportprimaryWorkEmail>bal.shil@gmail.com</wd:ReportprimaryWorkEmail>
<wd:Security_Groups>
<wd:Security_Group_Name>SG Group 1</wd:Security_Group_Name>
<wd:Security_Group_Type>UBSG Group</wd:Security_Group_Type>
<wd:Reference_ID_Type_XML_Name>Group_ID</wd:Reference_ID_Type_XML_Name>
<wd:SG_Reference_ID>SG_Learning</wd:SG_Reference_ID>
</wd:Security_Groups>
<wd:Flag>0</wd:Flag>
<wd:Company>AB</wd:Company>
</wd:Report_Entry>
<wd:Report_Entry>
</wd:Report_Data>
<wd:Report_Entry>
<wd:Worker>Har Sneh(2345)</wd:Worker>
<wd:Employee_ID>2345</wd:Employee_ID>
<wd:User_Name>har</wd:User_Name>
<wd:ReportprimaryWorkEmail>har.sneh@gmail.com</wd:ReportprimaryWorkEmail>
<wd:Security_Groups>
<wd:Security_Group_Name>SG Group 1</wd:Security_Group_Name>
<wd:Security_Group_Type>UBSG Group</wd:Security_Group_Type>
<wd:Reference_ID_Type_XML_Name>Group_ID</wd:Reference_ID_Type_XML_Name>
<wd:SG_Reference_ID>SG_Learning</wd:SG_Reference_ID>
</wd:Security_Groups>
<wd:Flag>1</wd:Flag>
<wd:Company>IT AB</wd:Company>
</wd:Report_Entry>
</wd:Report_Data>
<InputFile>
<Record>
<primary_email_address>sun.tan@hotmail.com</primary_email_address>
<preferred_last_name/>
<preferred_first_name/>
</Record>
<Record>
<primary_email_address>bal.shil@gmail.com</primary_email_address>
<preferred_last_name/>
<preferred_first_name/>
</Record>
<Record>
<primary_email_address>Ami.anu@note.com</primary_email_address>
<preferred_last_name/>
<preferred_first_name/>
</Record>
<Record>
<primary_email_address>har.sneh@gmail.com</primary_email_address>
<preferred_last_name/>
<preferred_first_name/>
</Record>
</InputFile>
</File>
我正在尝试将 InputFile primary_email_address 与 Report_Data ReportprimaryWorkEmail 进行比较,但 XSLT 代码下方始终与 ReportprimaryWorkEmail 的第一个 Report_Data 条目进行比较
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/CR">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<LogFile>
<xsl:for-each select="File/wd:Report_Data/wd:Report_Entry">
<xsl:choose>
<xsl:when test="(wd:ReportprimaryWorkEmail = //primary_email_address ) and (wd:Flag = '0')">
<EmpRecord>
<EmpID>
<xsl:value-of select="wd:Employee_ID"/>
</EmpID>
<Operation>
<xsl:text>Add</xsl:text>
</Operation>
<Email>
<xsl:value-of select="wd:ReportprimaryWorkEmail"/>
</Email>
</EmpRecord>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="File/InputFile/Record/primary_email_address">
<xsl:choose>
<xsl:when test="not(//File/wd:Report_Data/wd:Report_Entry[wd:ReportprimaryWorkEmail]/wd:ReportprimaryWorkEmail=.)">
<EmpRecord>
<Email>
<xsl:value-of select="."/>
</Email>
<Operation>
<xsl:text>Invalid</xsl:text>
</Operation>
<LastName>
<xsl:value-of select="../preferred_last_name"/>
</LastName>
<FirstName>
<xsl:value-of select="../preferred_first_name"/>
</FirstName>
</EmpRecord>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</LogFile>
</xsl:template>
</xsl:stylesheet>
请帮我对比一下 Report_Data 的所有节点
*我需要将 Report_Data 节点与 InputFile 节点进行比较,并获得以下场景的输出:------
- 场景 1 [操作:添加]:如果 ReportprimaryWorkEmail(在 Report_Data 节点中)存在 InputFile 节点 primary_email_address 和 Flag 为 0。||
- 场景 2 [操作:跳过]:如果 ReportprimaryWorkEmail(在 Report_Data 节点中)存在 InputFile 节点 primary_email_address 和 Flag 为 1。||
- 场景 3 [操作:无效]:如果 InputFile 节点 primary_email_address 不存在于 ReportprimaryWorkEmail(在 Report_Data 节点中)*
需要的输出
<Logfile>
<EmpRecord>
<Email>sun.tan@hotmail.com</Email>
<Operation>Invalid </Operation>
<preferred_last_name/>
<preferred_first_name/>
</EmpRecord>
<EmpRecord>
<Email>bal.shil@gmail.com</Email>
<Operation>Add</Operation>
<EmpID>1234</EmpID>
</EmpRecord>
<EmpRecord>
<Email>sun.tan@hotmail.com</Email>
<Operation>Invalid </Operation>
<preferred_last_name/>
<preferred_first_name/>
</EmpRecord>
<EmpRecord>
<Email>har.sneh@gmail.com</Email>
<Operation>Skip</Operation>
<EmpID>2345</EmpID>
</EmpRecord>
</Logfile>
【问题讨论】:
-
那么你需要的结果是什么?将其添加为代码 sn-p。并用通俗易懂的英语解释比较标准或选择标准。
-
嗨,马丁,我已经编辑了问题并添加了输出以及英语比较标准中的场景。如果您需要更多详细信息,请告诉我
标签: xml xslt foreach merge xslt-2.0