事实上,通常新加入XSLT的人,特别是来自通用语言的人,将XML文档视为一个可迭代的文档,其中节点必须与
for:each
和
if
逻辑顺序转换原始源。但是,在XSLT中,需要在模板中进行思考,以重新创建树。
当你走到第二层时,考虑以下几点
c
级别,然后使用xpath调用有条件地检索值。如果没有默认的名称空间,脚本会短得多,
urn:company:esb:services:Pricing:v01
根目录中需要
<xsl:element ... namespace=...>
在每个新分配的节点上。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" version="1.0" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/result/program/c">
<pricing-response xmlns="urn:company:esb:services:Pricing:v01">
<dummy>
<policy>
<xsl:apply-templates select="c"/>
</policy>
</dummy>
</pricing-response>
</xsl:template>
<xsl:template match="c">
<xsl:element name="policy-output" namespace="urn:company:esb:services:Pricing:v01">
<xsl:element name="quote_option" namespace="urn:company:esb:services:Pricing:v01">
<xsl:value-of select="m[@i='CR QUOTE OPTION ID']/@v"/>
</xsl:element>
<xsl:element name="total-taxsurcharge-amt" namespace="urn:company:esb:services:Pricing:v01">
<xsl:element name="amount" namespace="urn:company:esb:services:Pricing:v01">
<xsl:value-of select="m[@i='CR TOT TAXES AND SRCHRG']/@v"/>
</xsl:element>
</xsl:element>
<xsl:element name="total-premium-amt" namespace="urn:company:esb:services:Pricing:v01">
<xsl:element name="amount" namespace="urn:company:esb:services:Pricing:v01">
<xsl:value-of select="m[@i='CR TOT PREM']/@v"/>
</xsl:element>
</xsl:element>
<xsl:element name="taxsurcharge-summary" namespace="urn:company:esb:services:Pricing:v01">
<xsl:element name="taxsurcharge" namespace="urn:company:esb:services:Pricing:v01">
<xsl:element name="taxsurcharge-identifier" namespace="urn:company:esb:services:Pricing:v01">State</xsl:element>
<xsl:element name="taxsurcharge-amt" namespace="urn:company:esb:services:Pricing:v01">
<xsl:element name="amount" namespace="urn:company:esb:services:Pricing:v01">
<xsl:value-of select="m[@i='CR TOT STATE SRCHRG']/@v"/>
</xsl:element>
</xsl:element>
<xsl:element name="taxsurcharge-name" namespace="urn:company:esb:services:Pricing:v01">
<xsl:value-of select="m[@i='CR STATE SRCHRG NAME']/@v"/>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
XSLT Fiddle Demo