You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XSLT选择名为element的最后一个子元素的实现方法咨询

解决方案

你可以通过XPath的递归匹配符//跳过中间任意层级的其他节点,搭配last()函数筛选最后一个匹配的xsd:element节点,具体实现如下:

核心逻辑说明

  • //是XPath的递归通配符,会匹配当前节点下所有后代层级的目标节点,自动忽略中间的xsd:complexType、xsd:sequence等其他节点
  • 谓词[last()]会从匹配到的节点集合中选取最后一个元素

修改后的完整XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                version="1.0">

    <xsl:template match="/">
        <root>
            <xsl:for-each select="/xsd:schema/xsd:complexType/xsd:all/xsd:element">
                <!-- 选取当前element下所有层级中最后一个xsd:element节点 -->
                <xsl:variable name="lastElement" select=".//xsd:element[last()]"/>
                <xsl:element name="{$lastElement/@name}">
                    <xsl:for-each select="$lastElement/xsd:annotation/xsd:appinfo/xsd:hasProperty">
                        <field>
                            <xsl:attribute name="name">
                                <xsl:value-of select="@name" />
                            </xsl:attribute>
                            <xsl:value-of select="@value"/>
                        </field>
                    </xsl:for-each>
                </xsl:element>
            </xsl:for-each>
        </root>
    </xsl:template>

</xsl:stylesheet>

输出效果

针对你提供的输入XML,上述代码会匹配到Currency节点下嵌套的最后一个xsd:element(即TypeSysdate节点),输出对应的field属性。
如果你需要直接获取整个XML中所有xsd:element的最后一个,只需要把循环的select语句改成//xsd:element[last()]即可。

内容的提问来源于stack exchange,提问作者Jigar Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:18:02