【问题标题】:xsl into xhtml by using template recursion使用模板递归将 xsl 转换为 xhtml
【发布时间】:2012-12-03 18:08:31
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    只需删除&lt;xsl:value-of select="."/&gt;,然后将&lt;xsl:apply-templates select="*"/&gt; 更改为&lt;xsl:apply-templates/&gt;。这样,文本节点子节点的默认模板将输出它们(子节点的处理方式与以前相同)。

    【讨论】:

    • 太棒了。完美运行。所以这个默认模板(用于文本节点子节点)隐藏在某处。
    猜你喜欢
    • 2019-03-22
    • 2011-02-27
    • 2023-03-24
    • 1970-01-01
    • 2011-10-19
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多