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

XSLT 1.0中存储XML节点列表到变量失败问题求助

问题解决:XSLT 1.0 中正确获取 Locations 下的 Location 文本到变量

核心问题分析

你遇到的变量为空问题,本质是节点选择的上下文路径错误。调试时看到的 */text() 有内容,大概率是调试时的上下文处于 <Locations> 节点下,但变量定义时的当前上下文并非该节点,导致路径匹配不到目标文本。

解决方案

1. 存储节点集(保留所有独立的文本节点)

如果需要保留每个 <Location> 的文本作为独立节点(后续可遍历处理),需确保选择路径与当前上下文匹配:

  • 若当前上下文是根节点(比如模板匹配 /):
<xsl:variable name="my_locations" select="/Locations/Location/text()"/>
  • 若当前上下文已经是**<Locations> 节点**(比如模板匹配 Locations):
<xsl:variable name="my_locations" select="Location/text()"/>

测试验证:可以通过遍历变量输出内容确认:

<xsl:for-each select="$my_locations">
  <span>位置:<xsl:value-of select="."/></span>
</xsl:for-each>

2. 拼接为单个字符串(如逗号分隔)

如果需要将所有位置文本合并成一个字符串(XSLT 1.0 无原生字符串拼接函数,需手动处理):

<xsl:variable name="my_locations_str">
  <xsl:for-each select="Locations/Location">
    <!-- 非第一个元素前加逗号分隔 -->
    <xsl:if test="position() > 1">,</xsl:if>
    <xsl:value-of select="text()"/>
  </xsl:for-each>
</xsl:variable>

关键注意点

  • XSLT 1.0 中,<xsl:variable> 的 select 属性仅能选择节点集,若要生成字符串需用内容模板(如上述拼接示例)。
  • 始终确保节点选择路径的上下文正确性,避免使用模糊的 */text(),改用明确的层级路径(如 Locations/Location/text())减少歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:48:11