gpt4 book ai didi

XSLT for-each,其中 position() = 1

转载 作者:行者123 更新时间:2023-12-03 17:14:58 27 4
gpt4 key购买 nike

如果我有一个 NodeSet 的 XPath - 我的理解是以下 XSLT 将遍历与提供的 XPath 匹配的每个节点。和“value-of”函数,匹配“.”应该从每个匹配节点返回数据。

<xsl:for-each select="//some/X-Path/Here/*">

<xsl:value-of select="." />

</xsl:for-each">

如果我有单个元素的 xpath 怎么办?突然在那个单一节点上做一个“for-each”似乎很愚蠢。但是我在 XSLT 中找不到一个类似的“功能”来完成相同的行为——但是输入只是一个元素,而不是一个集合。

<xsl:match select="//some/X-Path/Here[1]">

<xsl:value-of select="." />

</xsl:match">

或者达到这种效果的东西。我错过了一些明显的东西吗?

最佳答案

好吧,你基本上自己回答了你的问题。迭代一个大小为 one 的节点集可能看起来有点奇怪,但还有其他方法可以做到这一点。一种是按照您的建议创建匹配模板并通过 <apply-templates> 调用它.另一种方法是按照@halfbit 的建议直接插入值。恕我直言,很难说什么是最好的方法。这绝对取决于上下文。

但是,也许还有两个支持 <for-each> 的想法与使用 <value-of> 相比.

  • 前者仅在表达式实际存在时执行,而后者始终执行。当然,这对 <value-of> 来说还不错。部分,因为它应该是空的,但如果它被包装器包围,它可能会不方便,这可能会破坏你的输出。所以换句话说
    ...
    <xsl:for-each select="//some/X-Path/Here/*">
    output something here
    <xsl:value-of select="." />
    output something here
    </xsl:for-each">
    ...

    具有 block 的隐式 if 条件,另一方面,该构造
    ...
    output something here
    <xsl:value-of select="//some/X-Path/Here/*" />
    output something here
    ...

    才不是。所以,你必须用 <if> 包围它。然后:
    ...
    <xsl:if test="//some/X-Path/Here/*">
    output something here
    <xsl:value-of select="//some/X-Path/Here/*" />
    output something here
    <xsl:if>
    ...
  • 另一件事是 <for-each>标记更改上下文节点,如果您想访问 XPath 路径中的多个元素,这可能会很方便。所以,例如,
    ...
    <xsl:for-each select="//some/X-Path/Here/*">
    <xsl:value-of select="@attr1" />
    <xsl:value-of select="@attr2" />
    <xsl:value-of select="@attr3" />
    ...
    <xsl:value-of select="@attrN" />
    </xsl:for-each">
    ...


    ...
    <xsl:if test="//some/X-Path/Here/*">
    <xsl:value-of select="//some/X-Path/Here/*/@attr1" />
    <xsl:value-of select="//some/X-Path/Here/*/@attr2" />
    <xsl:value-of select="//some/X-Path/Here/*/@attr3" />
    ...
    <xsl:value-of select="//some/X-Path/Here/*/@attrN" />
    <xsl:if>
    ...

    特别是如果您有一个冗长的 XPath 表达式。
  • 关于XSLT for-each,其中 position() = 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166878/

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