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

如何在XSLT中将节点属性值存储到变量中?

在XSLT中存储节点属性值到变量的实现方法

针对你的需求,结合给出的XML示例,我来一步步说明怎么操作:

首先,你的XML使用了sth:命名空间前缀,所以第一步要确保XSLT里正确声明这个命名空间,不然没法定位到对应的节点。下面是完整的XSLT示例,包含变量定义和验证输出:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:sth="http://your-real-sth-namespace" <!-- 替换成XML中sth前缀绑定的真实命名空间URI -->
                version="1.0">

  <xsl:template match="/">
    <!-- 示例1:把指定节点的属性值存入变量 -->
    <!-- 这里选择第一个DocumentVersion节点的id属性 -->
    <xsl:variable name="firstDocId" select="/sth:mainNode/DocumentVersion[1]/@id" />

    <!-- 示例2:根据属性值匹配节点,把目标内容存入变量 -->
    <!-- 这里匹配id为"01"的DocumentVersion,取出它的Stuff文本内容 -->
    <xsl:variable name="wantedStuff" select="/sth:mainNode/DocumentVersion[@id='01']/Stuff/text()" />

    <!-- 输出变量值,验证是否正确存储 -->
    <result>
      <first-document-id><xsl:value-of select="$firstDocId" /></first-document-id>
      <wanted-content><xsl:value-of select="$wantedStuff" /></wanted-content>
    </result>
  </xsl:template>

</xsl:stylesheet>

关键注意事项:

  • 命名空间必须一致:你的XML根节点sth:mainNode肯定绑定了一个具体的命名空间URI(格式类似xmlns:sth="http://xxx.com/xxx"),一定要把XSLT里的http://your-real-sth-namespace替换成这个真实URI,否则XSLT找不到目标节点。
  • 变量定义的两种方式:
    • 简单场景直接用select属性:像上面的示例一样,通过XPath表达式直接获取属性/节点值,写法简洁效率高。
    • 复杂逻辑用内容块:如果需要拼接、条件判断等操作,可以写成<xsl:variable name="varName">这里放复杂内容</xsl:variable>的形式。
  • XPath属性筛选语法:DocumentVersion[@id='01']是XPath里的属性选择器,意思是选中所有id属性等于01的DocumentVersion节点,后续可以继续定位它的子节点(比如Stuff)。

预期输出:

把这个XSLT应用到你的XML上,会得到如下结果:

<result>
  <first-document-id>01</first-document-id>
  <wanted-content>I want this</wanted-content>
</result>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:03:43