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

XSLT循环处理未知数量ItemOut元素及属性取值问题

XSLT遍历ItemOut元素无法获取属性值的解决方法

核心问题排查方向

1. 命名空间未正确绑定

如果源XML带有命名空间(比如xmlns="http://xxx.com/order"),XSLT里必须先声明该命名空间并使用前缀,否则XPath会找不到对应的元素。这是最常见的导致属性值为空的原因。

2. XPath路径错误

  • 检查xsl:for-each的select路径是否正确:比如当前上下文节点是<Header>,直接写ItemOut会找不到,需要用../ItemOut回到父节点,或者用绝对路径//ItemOut(带上命名空间前缀)。
  • 确认路径里的元素名称和源XML完全一致(大小写敏感)。

3. 属性访问语法错误

获取属性必须用@属性名的写法,比如@Quantity,如果写成Quantity会当成子元素查找,自然返回空值。


示例演示

源XML(带命名空间)

<Order xmlns="http://example.com/order-system">
  <OrderHeader>
    <OrderNo>SO-2024-0001</OrderNo>
  </OrderHeader>
  <ItemOut SKU="PROD001" Qty="3" UnitPrice="15.99"/>
  <ItemOut SKU="PROD002" Qty="1" UnitPrice="29.99"/>
</Order>

错误的XSLT(未处理命名空间)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <ERPOrder>
      <OrderNumber><xsl:value-of select="Order/OrderHeader/OrderNo"/></OrderNumber>
      <OrderLines>
        <!-- 这里select路径没带命名空间,找不到ItemOut元素 -->
        <xsl:for-each select="Order/ItemOut">
          <Line>
            <ProductCode><xsl:value-of select="@SKU"/></ProductCode>
            <Quantity><xsl:value-of select="@Qty"/></Quantity>
          </Line>
        </xsl:for-each>
      </OrderLines>
    </ERPOrder>
  </xsl:template>
</xsl:stylesheet>

修正后的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:os="http://example.com/order-system"> <!-- 声明命名空间并指定前缀os -->
  <xsl:template match="/">
    <ERPOrder>
      <OrderNumber><xsl:value-of select="os:Order/os:OrderHeader/os:OrderNo"/></OrderNumber>
      <OrderLines>
        <!-- 用前缀os访问命名空间下的ItemOut元素 -->
        <xsl:for-each select="os:Order/os:ItemOut">
          <Line>
            <ProductCode><xsl:value-of select="@SKU"/></ProductCode>
            <Quantity><xsl:value-of select="@Qty"/></Quantity>
          </Line>
        </xsl:for-each>
      </OrderLines>
    </ERPOrder>
  </xsl:template>
</xsl:stylesheet>

预期输出

<ERPOrder>
  <OrderNumber>SO-2024-0001</OrderNumber>
  <OrderLines>
    <Line>
      <ProductCode>PROD001</ProductCode>
      <Quantity>3</Quantity>
    </Line>
    <Line>
      <ProductCode>PROD002</ProductCode>
      <Quantity>1</Quantity>
    </Line>
  </OrderLines>
</ERPOrder>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:17