坚持使用xslt

时间:2010-10-12 07:57:04

标签: xml xslt

我是xslt的新手,现在我已经陷入了困境。

我有一个XML:

<map>
  <node TEXT="test" TYPE="node" >
    <element/>
    <node TYPE="normal" >
      <dummy>
        <FONT>
          mindmap_node1_l1
        </FONT>
      </dummy>
      <node LINK="url.com" TYPE="node" >
        <dummy>
          <FONT> 
            node node1_l2)
          </FONT>
        </dummy>
        <element/>
        <element/>
      </node>
    </node>
    <node TYPE="normal" >
      <dummy>
        <FONT>
          mindmap_node2_l1
        </FONT>
      </dummy>
      <node TYPE="normal" >
        <dummy>
          <FONT>
            mindmap_node3_l2
          </FONT>
        </dummy>
      </node>
    </node>
  </node>
</map>

我想让它转换成类似的东西:

<?xml version="1.0"?>
<transform text="">
  <transform text="mindmap_node1_l1">
    <transform text="node node1_l2)">
    </transform>
  </transform>
  <transform text="mindmap_node2_l1">
    <transform text="mindmap_node3_l2">
    </transform>
  </transform>
</transform>

我写了一个xslt:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="map">
    <xsl:apply-templates select="/map/node"/>
  </xsl:template>

  <xsl:template match="node">
    <xsl:element name="transform">
      <xsl:attribute name="text">
        <xsl:value-of select="normalize-space(.)"/>
      </xsl:attribute>
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

但它真的没有做我想要的。我做错了什么?

2 个答案:

答案 0 :(得分:1)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="map">
    <xsl:apply-templates select="/map/node"/>
  </xsl:template>

  <xsl:template match="node">
    <xsl:element name="transform">
      <xsl:attribute name="text">
        <xsl:value-of select="normalize-space(dummy/FONT)"/>
      </xsl:attribute>
      <xsl:apply-templates select="node"/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

更紧凑,这个样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="text()"/>
    <xsl:template match="node">
        <transform text="{normalize-space(dummy/FONT)}">
            <xsl:apply-templates />
        </transform>
    </xsl:template>
</xsl:stylesheet>

输出:

<transform text="">
    <transform text="mindmap_node1_l1">
        <transform text="node node1_l2)">
        </transform>
    </transform>
    <transform text="mindmap_node2_l1">
        <transform text="mindmap_node3_l2">
        </transform>
    </transform>
</transform>