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

如何筛选wd:Job_Classification_Group_ID为BB的首个wd:Job_Profile元素

解决方案

问题背景

  • 核心需求:从XML数据中筛选wd:Job_Classification_Group_ID值为'BB'的wd:Job_Profile节点,仅保留每个符合条件节点对应的首个位置条目,最终输出为CSV格式文件
  • 当前问题:现有XSLT转换后返回2条带BB值的记录,与预期仅输出1条结果的要求不符

常见触发原因

绝大多数该类异常由XPath筛选逻辑的谓词优先级错误导致:

  1. 位置筛选谓词[1]的作用范围错误,未限定为全局首个符合条件的wd:Job_Profile节点,而是遍历了所有符合条件的节点
  2. 位置条目筛选未加[1]限定,同一个wd:Job_Profile下的多个位置条目被多次输出
  3. wd命名空间声明不完整,导致节点匹配时误识别重复节点

修复代码示例

<!-- 请将此处wd命名空间的URI替换为你实际业务中对应的命名空间地址 -->
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wd="http://www.workday.com/your/actual/namespace">
    <xsl:output method="text" encoding="UTF-8" omit-xml-declaration="yes"/>

    <!-- 根模板:输出CSV表头 + 仅调用首个符合条件的节点 -->
    <xsl:template match="/">
        <!-- 输出CSV表头,可根据实际字段调整 -->
        <xsl:text>Job_Profile_ID,Position_ID,Job_Group_ID&#10;</xsl:text>
        <!-- 核心筛选:先匹配所有符合BB条件的Job_Profile,再取全局第一个 -->
        <xsl:apply-templates select="(//wd:Job_Profile[wd:Job_Classification_Group_ID = 'BB'])[1]"/>
    </xsl:template>

    <!-- 匹配符合条件的Job_Profile节点,输出单条CSV行 -->
    <xsl:template match="wd:Job_Profile">
        <!-- 输出Job_Profile唯一标识 -->
        <xsl:value-of select="wd:Job_Profile_ID"/>
        <xsl:text>,</xsl:text>
        <!-- 仅取当前节点下的首个位置条目 -->
        <xsl:value-of select="(wd:Position_Entry)[1]/wd:Position_ID"/>
        <xsl:text>,</xsl:text>
        <xsl:value-of select="wd:Job_Classification_Group_ID"/>
        <!-- 换行符分隔行 -->
        <xsl:text>&#10;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

关键调整说明

  • 谓词优先级控制:用括号将所有符合wd:Job_Classification_Group_ID='BB'的节点包裹后再加[1],确保仅取全局首个符合条件的wd:Job_Profile节点,避免遍历输出多条
  • 位置条目限定:取位置条目时同样加[1]筛选,仅输出当前wd:Job_Profile下的第一个位置条目,避免多位置条目导致重复行
  • 输出格式控制:仅在根模板输出一次CSV表头,避免模板重复调用时重复生成表头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:05