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

使用XSLT读取XML空元素<expressionTerm>的expression属性问题咨询

XSLT 读取空元素属性问题解决方案

核心错误排查

你的代码出现空白输出主要有两个原因:

  1. XPath 大小写敏感导致匹配失败
    XPath 对节点名称的大小写严格敏感,你的 XML 中节点名为 ruleConditions,但你写的 XPath 路径用了全小写的 rulecondition,既少了后缀s,大小写也不匹配,导致完全匹配不到目标节点。
  2. HTML 表格结构不完整
    你在 xsl:for-each 循环内直接输出 <td> 单元格标签,缺少外层的 <tr> 行标签,会导致 HTML 表格渲染异常。

补充说明:空元素不影响属性读取,XSLT 读取元素属性的逻辑和元素是否包含子节点无关,只要属性存在就可以正常获取,不需要额外配置。


修正后的完整 XSLT 代码

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <!-- 输出方法改为html更适配HTML页面输出场景 -->
  <xsl:output method="html" indent="yes" />
  <xsl:template match="/">
    <html>
      <body>
        <h1 align="center">Basic Details</h1>
        <table border="3" align="center">
          <tr>
            <th>计算表达式</th>
          </tr>
          <!-- 修正节点名称大小写,调整匹配路径 -->
          <xsl:for-each select="rule/ruleConditions/condition/children/condition/children/expressionTerm">
            <tr>
              <td>
                <xsl:value-of select="@expression" />
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

优化方案

如果不需要严格限制节点层级,你可以直接用//expressionTerm全局匹配所有<expressionTerm>节点,避免层级写错的问题,修改后的循环写法如下:

<xsl:for-each select="//expressionTerm">
  <tr>
    <td>
      <xsl:value-of select="@expression" />
    </td>
  </tr>
</xsl:for-each>

该写法无论<expressionTerm>节点嵌套在多少层结构内,都可以正确匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:45:04