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

能否从节点路径获取属性值?求解析指定XSL代码功能

拆解你的XSL代码逻辑 & 属性值输出问题

让我一步步帮你理清这行代码的工作原理,顺便解答你的属性值输出疑问:

1. 逐部分解析 <xsl:value-of select="/product/price[contains($name, @name)]/@poz" />

这行代码的核心是用<xsl:value-of>输出指定选中项的值,我们拆成三段看:

  • /product/price:这是XPath路径,从XML文档的根节点开始,定位到所有<product>节点下的直接子节点<price>。简单说就是先把所有<price>节点捞出来。
  • [contains($name, @name)]:这是XPath谓词(过滤条件),用来筛选上面捞出来的<price>节点:
    • $name是你定义的XSL变量,里面存了一个字符串;
    • @name是当前<price>节点的name属性值;
    • contains(A,B)的作用是检查字符串A是否包含字符串B,所以这里的逻辑是:只保留那些<price>节点的name属性值,是变量$name值的子串的节点。

    注意:这里很容易踩坑——如果你的实际需求是检查$name是否包含在@name里,那参数顺序要反过来写成contains(@name, $name),别搞反了!

  • /@poz:最后定位到符合过滤条件的<price>节点的poz属性,<xsl:value-of>会输出这个属性的具体值。

举个实际例子,如果你的XML是这样:

<product>
  <price name="summer_sale" poz="50">199</price>
  <price name="winter_clearance" poz="70">99</price>
</product>

假设$name的值是summer,那contains("summer", "summer_sale")会返回false(因为"summer"里没有"summer_sale"),这行代码不会输出任何内容;如果$name是summer_sale,那过滤条件成立,会输出50。

2. 关于“从节点路径显示属性值”的疑问

当然可以!这正是你这行代码正在做的事情😉。在XPath里,要获取节点的属性值,只需要在节点路径后面加上@属性名即可,比如:

  • 要获取单个<price>节点的poz属性:/product/price[1]/@poz
  • 要获取所有<price>节点的poz属性(XSLT 2.0+支持批量输出):/product/price/@poz
    然后用<xsl:value-of>就能直接输出这些属性的值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:46:34