1
我需要输入1个.XML文件,并输出N个输入文件的子集文件。该子集基于2个节点的谓词检查。我的计划是通过XSLT模板运行输入文件N次以输出每个文件。XSLT - 在标签中输出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 '或员工/ offices_administered/office_administered/@ agency_code = '22']然后我得到所有员工。
这几乎就像我想要一些神奇的东西在我的两个父标记中包裹我匹配的整个输出。
完美,非常感谢你@! – Dave 2013-04-05 03:16:52
@Dave,不客气。我更新了解决方案,简化了它。 – 2013-04-05 03:18:06
@Dave,另请参见上次更新:如果您有可用的XSLT 2.0处理器,则只需执行一次转换即可创建所有N个文件。 – 2013-04-05 03:24:02