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

XSLT 1.0如何提取列表指定元素文本拼接生成元素属性值

问题修正说明

原代码存在以下几类错误,会直接导致运行失败或结果不符合预期:

  • XPath路径错误:输入XML中WORK节点下的子节点是带复数后缀的TASKS,原代码写为WORK/TASK/OFFICE,无法匹配到任何OFFICE节点。
  • 函数语法错误:normalize-space函数名被错误写为带多余横杠和空格的normalize- space;且XSLT 1.0不支持在路径步进后直接调用函数,需要将目标节点作为参数传入函数。
  • 硬编码逻辑缺陷:取最后一个var节点时硬编码索引为[5],如果后续节点数量增减会直接失效,应该用内置的last()函数定位最后一个节点。
  • 标签结构错误:xsl:for-each标签没有编写对应的闭合标签,会触发XSLT解析语法错误。
  • 配置与命名不匹配:xsl:output的输出方法设置为html,不符合XML输出要求;自定义属性名原代码写为首字母大写的Complete,和期望输出的小写complete不一致;额外引入了完全用不到的exslt日期命名空间。
修正后的XSLT 1.0代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output version="1.0" encoding="UTF-8" standalone="yes" indent="yes" method="xml"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
        <Branch>
            <xsl:for-each select="WORK/TASKS/OFFICE">
                <Company>
                    <xsl:attribute name="complete">
                        <xsl:value-of select="normalize-space(information/var[1])"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="normalize-space(information/var[2])"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="normalize-space(information/var[last()])"/>
                    </xsl:attribute>
                </Company>
            </xsl:for-each>
        </Branch>
    </xsl:template>
</xsl:stylesheet>

代码中用<xsl:text> </xsl:text>手动拼接三个文本段之间的空格,避免全局strip-space配置导致文本粘连;取最后一个var节点使用var[last()]语法,不依赖固定的节点总数,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:57:13