我正在使用递归模板匹配将所有xml元素转换为xhtml <div>
标记。
基本上,我希望将元素name()
转换为类名,即。 <div class="name()">value</div>
我使用了以下内容:
<body>
<xsl:apply-templates />
</body>
<xsl:template match="*">
<div class="{name()}"><xsl:value-of select="."/>
<xsl:apply-templates select="*"/>
</div>
</xsl:template>
它运行得很好,除了它取出父标签上的值。 例如,这个xml
<TotalPayments>
<Amount>26.96</Amount>
<TaxableAmount>26.96</TaxableAmount>
<TaxAmount>0.00</TaxAmount>
<ShippingAmount>0.00</ShippingAmount>
</TotalPayments>
变成:
<div class="TotalPayments">
26.96
26.96
0.00
0.00
<div class="Amount">26.96</div>
<div class="TaxableAmount">26.96</div>
<div class="TaxAmount">0.00</div>
<div class="ShippingAmount">0.00</div>
</div>
我只想要
<div class="TotalPayments">
<div class="Amount">26.96</div>
<div class="TaxableAmount">26.96</div>
<div class="TaxAmount">0.00</div>
<div class="ShippingAmount">0.00</div>
</div>
树变得越来越糟糕。根也有这一切。
我应该做一个测试,还是只能选择某些类型。 我也尝试过匹配
* | text()
* | node()
感谢。
答案 0 :(得分:0)
只需删除<xsl:value-of select="."/>
,然后将<xsl:apply-templates select="*"/>
更改为<xsl:apply-templates/>
即可。这样,文本节点子节点的默认模板将输出它们(并且子元素的处理方式与之前相同)。