【问题标题】:Create variable tag from XML tag value从 XML 标记值创建变量标记
【发布时间】:2011-08-30 08:20:28
【问题描述】:

是否可以更改给定的 XML 结构

<Cars>
    <Car>Honda</Car>
    <Car>Ferrari</Car>
</Cars>

使用 XLST 来

<Cars>
    <Honda></Honda>
    <Ferrari></Ferrari>
</Cars>

我对 XSLT 有点了解,但不知道如何创建变量标签。

谢谢大家。 我很欣赏这三个答案,并投了赞成票。

【问题讨论】:

  • 您将需要一个至少与根元素匹配的模板(在我假设这是作为较大 XSLT 的一部分的一个小示例之前回答时)。我已更新我的答案以包括 &lt;xsl:template match="/"&gt;
  • 感谢您的快速回答,我才刚刚开始学习 XLST,如果不是这样,我会接受您的回答。

标签: xml xslt


【解决方案1】:

您可以使用<xsl:element> 按给定名称创建元素。例如。在您的情况下,它将类似于:

<xsl:template match="Car">
    <xsl:element name="{text()}"></xsl:element>
</xsl:template>

更新: 这是一个片段。通常,对于只修改树中的几个节点的这种转换来说,这是一种很好的方法。您定义复制模板:

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

它只是按原样复制整个 xml 树,然后为特定元素、属性等添加一些自定义模板,例如至于上面的“汽车”。

【讨论】:

    【解决方案2】:

    您正在寻找xsl:element,其名称在运行时使用大括号计算,如下所示:

    <xsl:template match="/">
        <xsl:for-each select="Cars/Car">
            <xsl:element name="{.}"/>
        </xsl:for-each>
    </xsl:template>
    

    【讨论】:

      【解决方案3】:

      试试这个:

      <?xml version="1.0"?>
      <xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:template match="/">
              <xsl:apply-templates />
          </xsl:template>
      
          <xsl:template match="Cars">
              <Cars>
                  <xsl:for-each select="Car">
                      <xsl:element name="{.}"/>
                  </xsl:for-each>
              </Cars>
          </xsl:template>
      </xsl:stylesheet>
      

      【讨论】:

        猜你喜欢
        • 2020-08-25
        • 2012-11-30
        • 2020-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多