【发布时间】:2016-03-21 16:43:51
【问题描述】:
基本上我需要组合来自两个不同 xslt 转换的输出。
我正在使用“container.xslt”来导入和组合两个内部xslt:“transform1.xslt”和“transform2.xslt”
这两个转换文件是由 xslt 工具程序生成的,所以我想避免对它们进行更改。
这是我的输入 xml:
<Enrollments>
<Enrollment>
<MEDICAL id="11111111">
</MEDICAL>
</Enrollment>
</Enrollments>
这是我目前得到的输出:
<fields>
<fields>
<field name="ID1">
<value>11111111</value>
</field>
</fields>
<fields>
<field name="ID2">
<value>11111111</value>
</field>
</fields>
</fields>
这是我正在寻找的输出:
<fields>
<field name="ID1">
<value>11111111</value>
</field>
<field name="ID2">
<value>11111111</value>
</field>
</fields>
container.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn">
<xsl:include href="./transform1.xslt"/>
<xsl:include href="./transform2.xslt"/>
<xsl:output method="xml" encoding="UTF-8" byte-order-mark="no" indent="yes"/>
<xsl:variable name="list1">
<xsl:call-template name="one" />
</xsl:variable>
<xsl:param name="list2">
<xsl:call-template name="two"/>
</xsl:param>
<xsl:template name="mergedList" match="/">
<fields>
<xsl:copy-of select="$list1" />
<xsl:copy-of select="$list2" />
</fields>
</xsl:template>
</xsl:stylesheet>
transform1.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
<xsl:output method="xml" encoding="UTF-8" byte-order-mark="no" indent="yes"/>
<xsl:template match="/" name="one">
<fields>
<field>
<xsl:attribute name="name" select="'ID1'"/>
<xsl:for-each select="Enrollments/Enrollment/MEDICAL">
<value>
<xsl:sequence select="fn:string(@id)"/>
</value>
</xsl:for-each>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
transform2.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="fn">
<xsl:output method="xml" encoding="UTF-8" byte-order-mark="no" indent="yes"/>
<xsl:template match="/" name="two">
<fields>
<field>
<xsl:attribute name="name" select="'ID2'"/>
<xsl:for-each select="Enrollments/Enrollment/MEDICAL">
<value>
<xsl:sequence select="fn:string(@id)"/>
</value>
</xsl:for-each>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
它可能完全属于另一个问题,但如果有人有建议,我会在这里添加它。我必须将这两行添加到我的转换文件中,以允许我在 container.xslt 中使用命名模板。最好避免更改导入的 xlst
<xsl:attribute name="name" select="'ID1'"/>
和
<xsl:attribute name="name" select="'ID2'"/>
提前感谢您的任何建议!我对 xslt 还很陌生,手写的东西不多。
【问题讨论】: