Мне нужно взять файл .XML и вывести N файлов, которые являются подмножеством входного файла. Этот поднабор основан на проверке предикатов на 2 узла. Мой план состоит в том, чтобы запустить входной файл по шаблону XSLT N раз для вывода каждого файла.XSLT - wrapping xsl: вывод шаблона в теге
Мой вход выглядит следующим образом:
<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: шаблон матча, то эти метки повторяются несколько раз/
Если я изменить свой матч предикат/employee_data/сотрудников [сотрудник/agency_code = '22 'или employee/office_administered/office_administered/@ agency_code = '22'], тогда я получаю всех сотрудников.
Это похоже на то, что я хочу, чтобы какая-то магия обертывала весь мой результат матча в двух моих родительских тегах.
Отлично, большое спасибо @! – Dave
@ Дэйв, добро пожаловать. Я обновил решение, упростив его. –
@Dave, см. Также последнее обновление: если у вас есть процессор XSLT 2.0, вы можете создать все N файлов с одним выполнением преобразования. –