gpt4 book ai didi

templates - xslt V1.0 - 从子模板返回多个值的最简单方法

转载 作者:行者123 更新时间:2023-11-30 23:46:13 25 4
gpt4 key购买 nike

我正在寻找一种优雅的方式来从一个子模板返回多个值。

为什么? - 我有一个带有递归循环的子模板,它返回 xml 中节点的最大值。我还需要可以从同一个子模板中获得的最小值和节点总数。我不会循环 3 次,这对性能来说不是很好:)

到目前为止我找到的解决方案:

  • 创建一个包含我需要的 3 个值的字符串并获取它们的子字符串。
  • ...

  • 我正在使用 xsl v1.0

    谢谢

    最佳答案

    访问单个字符串中呈现的许多(比如数百个)结果中的每一个可能不方便 .

    这是可以最好地看到和利用 XML 和 XPath 的力量的地方:生成一个 XML 树作为结果 .

    下面是一个例子:

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
    <xsl:call-template name="sequenceStatistics">
    <xsl:with-param name="pSeq" select="*"/>
    </xsl:call-template>
    </xsl:template>

    <xsl:template name="sequenceStatistics">
    <xsl:param name="pSeq"/>

    <xsl:variable name="vCount" select="count($pSeq)"/>

    <results>
    <count><xsl:value-of select="$vCount"/></count>
    <xsl:for-each select="$pSeq">
    <xsl:sort data-type="number"/>
    <xsl:choose>
    <xsl:when test="position() = 1">
    <min><xsl:value-of select="."/></min>
    </xsl:when>
    <xsl:when test="position() = $vCount">
    <max><xsl:value-of select="."/></max>
    </xsl:when>
    </xsl:choose>
    </xsl:for-each>
    </results>
    </xsl:template>
    </xsl:stylesheet>

    当此转换应用于以下 XML 文档时 :
    <nums>
    <num>7</num>
    <num>3</num>
    <num>9</num>
    <num>10</num>
    <num>4</num>
    <num>2</num>
    <num>5</num>
    <num>08</num>
    <num>6</num>
    <num>1</num>
    </nums>

    产生了想要的、正确的结果 :
    <results>
    <count>10</count>
    <min>1</min>
    <max>10</max>
    </results>

    请注意 :
  • 如果结果在变量体中,则变量类型为 RTF (结果树片段)并且必须使用 xxx:node-set() 将其转换为常规树。在可以单独访问结果的节点之前运行。 XPath 2.0 (XSLT 2.0) 中没有这样的限制。
  • 如本例所示,不需要递归来产生序列 的最大值和最小值。 -- 即使在 XSLT 1.0 中。
  • 关于templates - xslt V1.0 - 从子模板返回多个值的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890106/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com