使用模板递归将xsl转换为xhtml

时间:2012-12-03 18:08:32

标签: xml xslt xpath

我正在使用递归模板匹配将所有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()

感谢。

1 个答案:

答案 0 :(得分:0)

只需删除<xsl:value-of select="."/>,然后将<xsl:apply-templates select="*"/>更改为<xsl:apply-templates/>即可。这样,文本节点子节点的默认模板将输出它们(并且子元素的处理方式与之前相同)。