基本上我有3个独立的XSLT,目前可用于3种不同的XML。相反,我希望有一个XSLT可以根据传入中的特定来决定执行特定的XSLT并获得结果良好的XML。
我尝试使用以下方法 -
<?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:choose>
<xsl:when test="fruits/apples">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<data>
<doc api_type="2" key="20" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:custom="urn:custom.com" ">
<custom:DataSet xyt1:type="tdc:somedataset">
<custom:some_table>
<custom:anothertable>
<xyt1:key>
<xyt1:fruitqty>
<xsl:value-of select="fruit/apple"/>
</xyt1:fruitqty>
</xyt1:key>
<end of this xslt>
</xsl:when>
<xsl:when test="vegetables/tomatoes">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<data>
<doc api_type="3" key="100" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:custom="urn:custom.com" ">
<custom:DataSet xyt1:type="tdc:somedataset2">
<custom:some_table2>
<custom:anothertable2>
<xyt1:fruitqty>
<xsl:value-of select="fruit/oranges"/>
</xyt1:fruitqty>
<end of this xslt2>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
我会得到两个不同的XML文件 -
档案1 -
<fruits>
<apple>2</apple>
</fruits>
档案2 -
<vegetables>
<tomatoes>2</tomatoes>
</vegetables>
所以我想在找到水果/苹果时执行第一个xslt,然后为蔬菜/西红柿执行另一个xslt。
准确地说,基于输入XML节点,我想执行一个特定的XSLT,我有个别的工作文件,但我希望它们都在一个单独的XSLT中。
这个方法进入正确的块但是没有输出任何“节点”,它只是输出XML中的值。
例如.-
它只显示苹果的“2”而不是像<xyt1:fruitqty> 2 </xyt1:fruitqty>.
结果我无法获得格式正确的XML。任何想法如何做到这一点?
答案 0 :(得分:0)
所以我想在找到水果/苹果时执行第一个xslt 为蔬菜/西红柿执行另一个。
我建议你使用单独的模板来匹配每种类型的输入,例如:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<output>
<!-- instructions common to all types -->
<xsl:apply-templates/>
</output>
</xsl:template>
<xsl:template match="/fruits">
<!-- instructions for transforming fruits -->
</xsl:template>
<xsl:template match="/vegetables">
<!-- instructions for transforming vegetables -->
</xsl:template>
</xsl:stylesheet>