我的xml只选择最后一个import(IdentifierXSLT),而不选择上面的那个;我想导入所有其他导入。我可以在需要导入的所有xslt中使用apply模板吗? 我该如何实现?任何帮助,将不胜感激。
我的XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:import href="DocumentHeaderXSLT.xsl"/>
<xsl:import href="IdentifierXSLT.xsl"/>
<xsl:template match="/">
<xsl:element name="ApplicationBatch">
<xsl:namespace name="xsi" select="'http://www.w3.org/2001/XMLSchema-instance'"/>
<xsl:namespace name="xsd" select="'http://www.w3.org/2001/XMLSchema'"/>
<xsl:apply-imports/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我的Xml:
<?xml version="1.0" encoding="UTF-8"?>
<ApplicationBatch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DocumentHeader>
<SchemaName xsi:type="xsd:string">AcmeCorp_MotorApplicationRequest</SchemaName>
<SchemaVersion xsi:type="xsd:string">v1_0</SchemaVersion>
</DocumentHeader>
<Identifier Type="LenderAssigned" UniqueID="ACMECORP"/>
<Submission>
<Date>2017-03-07</Date>
<Time>09: 07: 39.1373551+11: 00</Time>
</Submission>
</ApplicationBatch>
DocumentHeaderXSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:element name="DocumentHeader">
<xsl:element name="SchemaName" >
<xsl:attribute name="xsi:type">xsd:string</xsl:attribute>
<xsl:value-of select="/ApplicationBatch/DocumentHeader/SchemaName"/>
</xsl:element>
<xsl:element name="SchemaVersion">
<xsl:attribute name="xsi:type">xsd:string</xsl:attribute>
<xsl:value-of select="/ApplicationBatch/DocumentHeader/SchemaVersion"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
IdentifierXSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:element name="Identifier">
<xsl:attribute name="Type">
<xsl:value-of select="/ApplicationBatch/Identifier/@Type"/>
</xsl:attribute>
<xsl:attribute name="UniqueID">
<xsl:value-of select="/ApplicationBatch/Identifier/@UniqueID"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
预期输出:
<ApplicationBatch ProductionData="Yes"
xmlns:xsd="htt://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DocumentHeader>
<SchemaName xsi:type="xsd:string">AcmeCorp_MotorApplicationRequest</SchemaName>
<SchemaVersion xsi:type="xsd:string">v1_0</SchemaVersion>
</DocumentHeader>
<Identifier Type="BrokerAssigned"
UniqueID="Ref24723"/>
</ApplicationBatch>
我的输出:
<ApplicationBatch ProductionData="Yes"
xmlns:xsd="htt://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Identifier Type="BrokerAssigned"
UniqueID="Ref24723"/>
</ApplicationBatch>
答案 0 :(得分:0)
使用xsl:apply-templates
时,将考虑所有匹配的模板规则,并且 import优先级最高的规则将获胜。如果要对同一节点执行多个模板规则,则有多种选择:您可以在不同的模式中调用apply-templates两次,也可以让一个模板规则使用xsl:apply-imports
或xsl:next-match
。