gpt4 book ai didi

xml - XSL - 如何判断元素是否是系列中的最后一个

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:17 26 4
gpt4 key购买 nike

我有一个选择执行的 XSL 模板(如下)。我想做的是能够判断我是否是最后一个被匹配的 Unit

  <xsl:template match="Unit[@DeviceType = 'Node']">
<!-- Am I the last Unit in this section of xml? -->
<div class="unitchild">
Node: #<xsl:value-of select="@id"/>
</div>
</xsl:template>

示例 XML

<Unit DeviceType="QueueMonitor" Master="1" Status="alive" id="7">
<arbitarytags />
<Unit DeviceType="Node" Master="0" Status="alive" id="8"/>
<Unit DeviceType="Node" Master="0" Status="alive" id="88"/>
</Unit>

最佳答案

当前选择的答案一般是不正确的!

<xsl:if test="not(following-sibling::Unit)">

这不适用于任何 XML 文档和任何 <xsl:apply-templates>

原来的问题是关于最后一个Unit被匹配,而不是最后一个 sibling !哪个是最后一个被匹配的 Unit 只取决于 <xsl:apply-templates> 的 select 属性中的表达式,而不是 XML 文档的物理属性。

实现方式:

<xsl:apply-templates select="SomeExpression"/>

然后在与 SomeExpression 选择的节点相匹配的模板中:

<xsl:if test="position() = last()">
. . . .
</xsl:if>

这会检查当前节点是否是 node-list 中的最后一个节点由 <xsl:apply-templates> 选择,并不是说当前节点是最后一个兄弟。这完全回答了原来的问题。

如果问题以不同的方式提出,询问如何识别最后一个兄弟Unit是当前节点,那么最好的解决方案是为最后一个兄弟节点指定一个单独的模板:

<xsl:template match="Unit[last()]">
. . . .
</xsl:template>

请注意,在这种情况下,无需在模板中编写任何条件逻辑来测试当前节点是否为“最后一个”。

关于xml - XSL - 如何判断元素是否是系列中的最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2817664/

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