You need to enable JavaScript to run this app. XSLT 2.0按公共子元素值分组输出及默认命名空间适配问题求解
优惠活动
大模型
产品
解决方案
定价
更多

XSLT 2.0按公共子元素值分组输出及默认命名空间适配问题求解

XSLT默认命名空间匹配失败问题解决方案

问题原因

源XML定义了默认命名空间http://www.taleo.com/ws/integration/toolkit/2005/07,所有子节点默认都属于该命名空间。你虽然在XSLT中声明了to前缀映射该命名空间,但所有XPath匹配、选择表达式中的元素名没有加to前缀,XSLT会将其识别为无命名空间元素,无法匹配到源文件中的节点,导致转换不生效。

修正后的完整XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:to="http://www.taleo.com/ws/integration/toolkit/2005/07" 
xmlns:util="http://www.mavixconsulting.com/2013/XSL/transform" 
exclude-result-prefixes="to util">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<!-- 匹配带命名空间的ExportXML节点 -->
<xsl:template match="to:ExportXML">
<!-- 选择带命名空间的record节点分组 -->
<xsl:for-each-group select="to:record" group-by="to:job_id">
<EF_Position>
<!-- 手动构造无命名空间的job_id节点,避免带原命名空间输出 -->
<job_id>
    <xsl:value-of select="to:job_id"/>
</job_id>
<title>
      <xsl:value-of select="to:title"/>
    </title>
    <coll1>
    <xsl:for-each select="current-group()">
    <coll>
<!-- 取当前组内带命名空间的coll节点值 -->
<xsl:value-of select="to:coll"/>
</coll>
</xsl:for-each>
</coll1>
</EF_Position>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>

关键修改点

  • 所有匹配、选择源XML元素的XPath表达式前统一添加to:前缀,和声明的命名空间映射对应,可正确识别源文件中的节点
  • 将原xsl:sequence直接复制节点的逻辑改为手动构造job_id元素,避免将源XML的命名空间带入输出结果,符合要求的输出格式
  • 所有引用源节点值的select属性都补充了to:前缀,可正确读取对应字段值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:15:07