首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚持使用xslt

坚持使用xslt
EN

Stack Overflow用户
提问于 2010-10-12 15:57:04
回答 2查看 148关注 0票数 1

我是xslt的新手,现在我被它卡住了。

我有一个XML:

代码语言:javascript
复制
<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>

我想让它转换成这样的东西:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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>

但它真的做不到我想要的。我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-12 17:17:01

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2010-10-12 22:06:02

更紧凑的是这个样式表:

代码语言:javascript
复制
<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>

输出:

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3912594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档