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

如何在XSLT 1.0中引用指定类型的XML复杂类型元素?

XSLT 1.0:提取指定type属性的ID元素并转换Supplier_Reference属性为子元素

我来帮你修正这个XSLT的问题,你需要精准筛选type="Supplier_ID"的ID元素,同时把Supplier_Reference的Descriptor属性转成Supplier_Name子元素,对吧?咱们一步步来调整你的代码:

原代码的问题点

  1. <xsl:value-of select="ID"/>会默认选取第一个ID节点,无法筛选指定type的元素
  2. Supplier_Name的取值路径../Supplier_Reference/attribute::Descriptor冗余,当前上下文就是Supplier_Reference节点,直接访问属性即可
  3. 多余添加了Purchase_Order_ID元素,目标XML中不需要这个节点

修改后的完整XSLT代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>
  
  <!-- 身份转换模板:默认复制所有节点和属性 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  
  <!-- 专门处理Supplier_Reference节点的模板 -->
  <xsl:template match="Supplier_Reference">
    <Supplier_Reference>
      <!-- 从当前节点的Descriptor属性生成Supplier_Name元素 -->
      <Supplier_Name>
        <xsl:value-of select="@Descriptor"/>
      </Supplier_Name>
      <!-- 筛选type为Supplier_ID的ID元素,取出其文本值 -->
      <Supplier_ID>
        <xsl:value-of select="ID[@type='Supplier_ID']"/>
      </Supplier_ID>
    </Supplier_Reference>
  </xsl:template>
</xsl:stylesheet>

关键说明

  • 筛选指定type的ID:使用谓词ID[@type='Supplier_ID'],这是XSLT 1.0中根据属性值筛选节点的标准写法,能精准定位到你需要的ID元素
  • 转换属性为子元素:在Supplier_Reference节点的模板中,直接通过@Descriptor访问当前节点的属性值,生成新的Supplier_Name子元素
  • 保留原有结构:身份转换模板确保除了Supplier_Reference之外的所有节点都保持原样,只修改你需要调整的部分

运行这个XSLT后,就能生成你预期的目标XML结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:33:00