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'] に変更すると、すべての従業員が取得されます。
マッチの出力全体を 2 つの親タグでラップする魔法が必要なようです。