У меня три XML файла, объединенные в один, так что это выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<wd:Report_Data xmlns:wd="urn:com.workday/bsvc">
<wd:Report_Entry>
<wd:RBO_Group>
<wd:Comment_BatchID>kns_timeoff20200105_5365_78659138</wd:Comment_BatchID>
<wd:Date_Worked>2020-01-02</wd:Date_Worked>
<wd:Hours>9</wd:Hours>
<wd:Type>Vacation</wd:Type>
<wd:Process_Date>2020-02-10</wd:Process_Date>
</wd:RBO_Group>
<wd:Employee_ID>106060</wd:Employee_ID>
</wd:Report_Entry>
</wd:Report_Data>
<wd:Report_Data xmlns:wd="urn:com.workday/bsvc">
<wd:Report_Entry>
<wd:RBO_Group>
<wd:Date_Worked>2014-12-15</wd:Date_Worked>
<wd:Hours>41.53</wd:Hours>
<wd:Type>UNITWAY</wd:Type>
<wd:Process_Date>2019-09-20</wd:Process_Date>
</wd:RBO_Group>
<wd:RBO_Group>
<wd:Date_Worked>2019-08-04</wd:Date_Worked>
<wd:Hours>5065.84</wd:Hours>
<wd:Type>zzzdnu BEREAVEWK2</wd:Type>
<wd:Process_Date>2019-09-24</wd:Process_Date>
</wd:RBO_Group>
</wd:Report_Entry>
</wd:Report_Data>
<Data>
<Worker>
<INT_ID>228606</INT_ID>
<WD_BATCH_ID>kns_timeoff20191229_232_78652526</WD_BATCH_ID>
<WD_PAY_INPUT_ID>228602</WD_PAY_INPUT_ID>
<DATE_WORKED>2019-12-12</DATE_WORKED>
<EMPLOYEE_ID>146379</EMPLOYEE_ID>
<WEEK_END_DATE>2019-12-15</WEEK_END_DATE>
<EFFECTIVE_DATE>2019-12-29</EFFECTIVE_DATE>
<HOURS>8</HOURS>
<PAY_COMPONENT>Jury Duty</PAY_COMPONENT>
<TK_COMMENTS>kns_wd20191229_232_78652526</TK_COMMENTS>
<SS_REQUEST_ID>78652508</SS_REQUEST_ID>
<REQUEST_ID>78652526</REQUEST_ID>
<PROCESS_DATE>2/6/2020 20:57</PROCESS_DATE>
<PROCESS_STATUS>C</PROCESS_STATUS>
</Worker>
</Data>
</Root>
И я хочу объединить все дочерние элементы двух <wd:Report_Data>
узлов, чтобы они все под тем же <wd:Report_Data>
узлом. Например:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<wd:Report_Data xmlns:wd="urn:com.workday/bsvc">
<wd:Report_Entry>
<wd:RBO_Group>
<wd:Comment_BatchID>kns_timeoff20200105_5365_78659138</wd:Comment_BatchID>
<wd:Date_Worked>2020-01-02</wd:Date_Worked>
<wd:Hours>9</wd:Hours>
<wd:Type>Vacation</wd:Type>
<wd:Process_Date>2020-02-10</wd:Process_Date>
</wd:RBO_Group>
<wd:Employee_ID>106060</wd:Employee_ID>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:RBO_Group>
<wd:Date_Worked>2014-12-15</wd:Date_Worked>
<wd:Hours>41.53</wd:Hours>
<wd:Type>UNITWAY</wd:Type>
<wd:Process_Date>2019-09-20</wd:Process_Date>
</wd:RBO_Group>
<wd:RBO_Group>
<wd:Date_Worked>2019-08-04</wd:Date_Worked>
<wd:Hours>5065.84</wd:Hours>
<wd:Type>zzzdnu BEREAVEWK2</wd:Type>
<wd:Process_Date>2019-09-24</wd:Process_Date>
</wd:RBO_Group>
</wd:Report_Entry>
</wd:Report_Data>
<Data>
<Worker>
<INT_ID>228606</INT_ID>
<WD_BATCH_ID>kns_timeoff20191229_232_78652526</WD_BATCH_ID>
<WD_PAY_INPUT_ID>228602</WD_PAY_INPUT_ID>
<DATE_WORKED>2019-12-12</DATE_WORKED>
<EMPLOYEE_ID>146379</EMPLOYEE_ID>
<WEEK_END_DATE>2019-12-15</WEEK_END_DATE>
<EFFECTIVE_DATE>2019-12-29</EFFECTIVE_DATE>
<HOURS>8</HOURS>
<PAY_COMPONENT>Jury Duty</PAY_COMPONENT>
<TK_COMMENTS>kns_wd20191229_232_78652526</TK_COMMENTS>
<SS_REQUEST_ID>78652508</SS_REQUEST_ID>
<REQUEST_ID>78652526</REQUEST_ID>
<PROCESS_DATE>2/6/2020 20:57</PROCESS_DATE>
<PROCESS_STATUS>C</PROCESS_STATUS>
</Worker>
</Data>
</Root>
Но важно, чтобы узел Data
оставался отдельным. Какой самый простой способ для меня скопировать XML и просто удалить эти две строки, чтобы все «wd: Report_Entry» находились в одном узле?
Я пробовал это:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday/bsvc">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*" />
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="wd:Report_Data/wd:Report_Entry">
<xsl:copy-of select="//wd:Report_Entry"/>
</xsl:template>
</xsl:stylesheet>
... который ПОЧТИ работает. Он помещает все узлы Report_Entry под одним и тем же родителем, но дублирует второй узел Report_Entry со всеми его дочерними элементами. Похоже, я должен быть в состоянии квалифицировать выбор с помощью [1]
, но я не знаю, как бы я сделал этот выбор, чтобы применить шаблон, без шаблона по умолчанию, выбирающего второй узел Report_Data ...
Есть предложения?