我需要接收 1 个 .XML 文件,并输出 N 个作为输入文件子集的文件。该子集基于 2 个节点的谓词检查。我的计划是在 XSLT 模板上运行输入文件 N 次以输出每个文件。
我的输入如下所示:
<employee_data>
<employees>
<employee id="1">
<first_name>2sk8d</first_name>
<agency_code>38</agency_code>
<offices_administered>
<office_administered office_identifier="ALLPOIs" agency_code="HL" />
</offices_administered>
</employee>
<employee id="2">
<first_name>2sk8d</first_name>
<agency_code>24</agency_code>
<offices_administered>
<office_administered office_identifier="ALLPOIs" agency_code="22" />
</offices_administered>
</employee>
<employee id="3">
<first_name>2sk8d</first_name>
<agency_code>22</agency_code>
<offices_administered>
<office_administered office_identifier="ALLPOIs" agency_code="HL" />
</offices_administered>
</employee>
</employees>
我的 XSLT 看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<xsl:output method="xml" indent="yes" encoding="utf-16"/>
<xsl:template match="/employee_data/employees/employee[agency_code='22' or offices_administered/office_administered/@agency_code='22']">
<xsl:copy>
<xsl:copy-of select="."/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:message terminate="no">
Catch 1 <xsl:value-of select="name()"/>
</xsl:message>
</xsl:template>
我的问题是我的输出不包含 EmployeeData 或 Employees 根/父节点。
如果我将 xslt 更改为放入第一个 xsl:template-match,那么这些标签会重复多次/
如果我将匹配谓词更改为 /employee_data/employees[employee/agency_code='22' 或 employee/offices_administered/office_administered/@agency_code='22'] 那么我会得到所有员工。
这几乎就像我想要一些魔法来将我的整个比赛输出包装在我的两个父标签中。