I have a xml file which is having 1000 workers with xpath env:Envelope/env:Body/wd:Get_Workers_Response/wd:Response_Data/wd:Worker
I need to split the file into multiple files based on the number of worker, say 50, using XSLT
My webservice response:
<?xml version="1.0" encoding="utf-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<wd:Get_Workers_Response xmlns:wd="urn:com.workday/bsvc" wd:version="v35.1">
<wd:Response_Filter>
<wd:As_Of_Effective_Date>2021-01-04</wd:As_Of_Effective_Date>
<wd:As_Of_Entry_DateTime>2021-01-04T23:28:03.113-08:00</wd:As_Of_Entry_DateTime>
<wd:Page>1</wd:Page>
<wd:Count>100</wd:Count>
</wd:Response_Filter>
<wd:Response_Results>
<wd:Total_Results>2</wd:Total_Results>
<wd:Total_Pages>1</wd:Total_Pages>
<wd:Page_Results>2</wd:Page_Results>
<wd:Page>1</wd:Page>
</wd:Response_Results>
<wd:Response_Data>
<wd:Worker>
<wd:Worker_Data>
<wd:Worker_ID>1</wd:Worker_ID>
<wd:Name>aaaaaa</wd:Name>
</wd:Worker_Data>
</wd:Worker>
<wd:Worker>
<wd:Worker_Data>
<wd:Worker_ID>2</wd:Worker_ID>
<wd:Name>bbbbbb</wd:Name>
</wd:Worker_Data>
</wd:Worker>
<wd:Worker>
<wd:Worker_Data>
<wd:Worker_ID>3</wd:Worker_ID>
<wd:Name>cccccc</wd:Name>
</wd:Worker_Data>
</wd:Worker>
.....
..... 998 more workers
Desired Output:
File 1:
Worker 1 to 50
<wd:Worker>
<wd:Worker_Data>
<wd:Worker_ID>1</wd:Worker_ID>
<wd:Name>aaaaaa</wd:Name>
</wd:Worker_Data>
</wd:Worker>
<wd:Worker>
<wd:Worker_Data>
<wd:Worker_ID>2</wd:Worker_ID>
<wd:Name>bbbbbb</wd:Name>
</wd:Worker_Data>
</wd:Worker>
...
...
<wd:Worker>
<wd:Worker_Data>
<wd:Worker_ID>50</wd:Worker_ID>
<wd:Name>xxxxx</wd:Name>
</wd:Worker_Data>
</wd:Worker>
File 2:
Worker 51 to 100
......
My XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wd="urn:com.workday/bsvc"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="wd:Response_Data">
<xsl:for-each-group select="wd:Worker" group-adjacent="(position()-1) idiv 50">
<xsl:result-document href="batch{position()}.xml">
<batch nr="{position()}">
<xsl:copy-of select="current-group()"/>
</batch>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…