如何解决XSLT,在For Loop中搜索大型文档
我有一个大型的xml文件,记录超过20k。以下是xml文件的示例。
我需要遍历每条Employee记录(在本例中为
每个员工记录都有其经理“ Employee_ID”。使用经理的“ Employee_ID”,我需要找到经理的电子邮件地址。
我可以使用下面的代码来做到这一点,但是正在谈论很多时间。有人可以建议是否还有其他方法可以实现这一目标?
这是我的xslt模板:
<xsl:template match="/">
<tns:Root>
<xsl:for-each select="/ns0:Report_Data/ns0:Report_Entry">
<tns:Record>
<tns:FirstName>
<xsl:value-of select="ns0:Legal_First_Name"/>
</tns:FirstName>
<xsl:variable name="Manager_Emp_Id" select="ns0:Manager_Level_01/ns0:ID[@ns0:type='Employee_ID']"/>
<tns:ManagerEmail>
<xsl:value-of select="/ns0:Report_Data/ns0:Report_Entry[ns0:Employee_ID=$Manager_Emp_Id]/ns0:Emails_group/ns0:Email_Address"/>
</tns:ManagerEmail>
</tns:Record>
</xsl:for-each>
</tns:Root>
</xsl:template>
这是我的xslt模板: 这是示例xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<Report_Data xmlns:wd="deltacore.com" xmlns="deltacore.com">
<wd:Report_Entry>
<wd:User_Name>EM11</wd:User_Name>
<wd:Employee_ID>1111</wd:Employee_ID>
<wd:Legal_First_Name>John</wd:Legal_First_Name>
<wd:Legal_Last_Name>William</wd:Legal_Last_Name>
<wd:Legal_Name_in_General_Display_Format>John William</wd:Legal_Name_in_General_Display_Format>
<wd:Legal_Name_in_Reporting_Display_Format>William,John</wd:Legal_Name_in_Reporting_Display_Format>
<wd:Full_Legal_Name>John William</wd:Full_Legal_Name>
<wd:Preferred_First_Name>John</wd:Preferred_First_Name>
<wd:Preferred_Last_Name>William</wd:Preferred_Last_Name>
<wd:Preferred_Name_group/>
<wd:Preferred_Name_in_General_Display_Format>John William</wd:Preferred_Name_in_General_Display_Format>
<wd:Preferred_Name_in_Reporting_Display_Format>William,John</wd:Preferred_Name_in_Reporting_Display_Format>
<wd:Emails_group>
<wd:Email_Usage_Type wd:Descriptor="Work">
<wd:ID wd:type="Communication_Usage_Type_ID">WORK</wd:ID>
</wd:Email_Usage_Type>
<wd:Email_Visibility wd:Descriptor="Public">
<wd:ID wd:type="Communication_Usage_Access_ID">PUBLIC</wd:ID>
</wd:Email_Visibility>
<wd:Is_Primary>1</wd:Is_Primary>
<wd:Email_Address>John.William@deltacore.com</wd:Email_Address>
</wd:Emails_group>
<wd:Manager_Level_01 wd:Descriptor="Peter Samual">
<wd:ID wd:type="Employee_ID">2222</wd:ID>
</wd:Manager_Level_01>
<wd:Manager_-_Level_01_group>
<wd:Manager_Employee_ID>2222</wd:Manager_Employee_ID>
<wd:Manager_Full_Legal_Name>Peter Samual</wd:Manager_Full_Legal_Name>
</wd:Manager_-_Level_01_group>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:User_Name>TM222</wd:User_Name>
<wd:Employee_ID>2222</wd:Employee_ID>
<wd:Legal_First_Name>Peter</wd:Legal_First_Name>
<wd:Legal_Last_Name>Samual</wd:Legal_Last_Name>
<wd:Legal_Name_in_General_Display_Format>Peter Samual</wd:Legal_Name_in_General_Display_Format>
<wd:Legal_Name_in_Reporting_Display_Format>Samual,Peter</wd:Legal_Name_in_Reporting_Display_Format>
<wd:Full_Legal_Name>Peter Samual</wd:Full_Legal_Name>
<wd:Preferred_First_Name>Peter</wd:Preferred_First_Name>
<wd:Preferred_Last_Name>Samual</wd:Preferred_Last_Name>
<wd:Preferred_Name_group/>
<wd:Preferred_Name_in_General_Display_Format>Peter Samual</wd:Preferred_Name_in_General_Display_Format>
<wd:Preferred_Name_in_Reporting_Display_Format>Samual,Peter</wd:Preferred_Name_in_Reporting_Display_Format>
<wd:Gender wd:Descriptor="Male">
<wd:ID wd:type="Gender_Code">Male</wd:ID>
</wd:Gender>
<wd:Emails_group>
<wd:Email_Usage_Type wd:Descriptor="Work">
<wd:ID wd:type="Communication_Usage_Type_ID">WORK</wd:ID>
</wd:Email_Usage_Type>
<wd:Email_Visibility wd:Descriptor="Public">
<wd:ID wd:type="Communication_Usage_Access_ID">PUBLIC</wd:ID>
</wd:Email_Visibility>
<wd:Is_Primary>1</wd:Is_Primary>
<wd:Email_Address>John.Samual@deltacore.com</wd:Email_Address>
</wd:Emails_group>
<wd:Manager_Level_01 wd:Descriptor="Test Manager">
<wd:ID wd:type="Employee_ID">3333</wd:ID>
</wd:Manager_Level_01>
<wd:Manager_-_Level_01_group>
<wd:Manager_Employee_ID>3333</wd:Manager_Employee_ID>
<wd:Manager_Full_Legal_Name>Test Manager</wd:Manager_Full_Legal_Name>
</wd:Manager_-_Level_01_group>
</wd:Report_Entry>
</Report_Data>
解决方法
声明密钥
<xsl:key name="id" match="wd:Report_Entry" use="ns0:Employee_ID"/>
作为顶层元素(即xsl:stylesheet
或xsl:transform
的子元素),然后使用例如
<tns:ManagerEmail>
<xsl:value-of select="key('id',$Manager_Emp_Id)/ns0:Emails_group/ns0:Email_Address"/>
</tns:ManagerEmail>
作为交叉引用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。