xml – XSLT – 递归地向外工作

我理解如何使用XSLT从最外层的person元素到最里层的元素处理这个doc(下面).但我想知道是否:

>如果它可以从最深的元素出来工作.
>根据我的例子,这会是什么样子.

<?xml version="1.0" encoding="utf-8" ?>
<container>
  <person name="Larry">
    <person name="Moe">
      <person name="Curly">
        <person name="Shemp">

        </person>
      </person>
    </person>
  </person>
</container>

解决方法

以下是执行“向后递归”的最常用方法,该方法不依赖于此特定问题,可用于各种各样的问题.

这种转变:

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

    <xsl:template match="/">
      <xsl:call-template name="backwardsRecursion">
        <xsl:with-param name="pList" select="//person"/>
      </xsl:call-template>
    </xsl:template>

    <xsl:template name="backwardsRecursion">
      <xsl:param name="pList"/>

      <xsl:if test="$pList">
        <xsl:apply-templates select="$pList[last()]"/>

        <xsl:call-template name="backwardsRecursion">
          <xsl:with-param name="pList" select=
           "$pList[position() &lt; last()]"/>
        </xsl:call-template>
      </xsl:if>
    </xsl:template>

    <xsl:template match="person">
      <xsl:value-of select="concat(@name,'&#xA;')"/>
    </xsl:template>
</xsl:stylesheet>

当应用于最初提供的XML文档时,产生想要的结果:

Shemp
Curly
Moe
Larry

请注意,调用名为“backwardsRecursion”的通用模板,它实际上实现了向后递归.此模板不了解它处理的节点或它们将如何处理.

因此,该模板可用于需要向后递归处理的每种情况.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇