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

如何通过带条件的XSLT映射从XML不同节点提取指定Manager详情

方案1:使用XSLT实现

以下是满足需求的XSLT样式表,可筛选出上级Company值为001的Person对应的Manager信息,生成指定结构的输出XML:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

  <!-- 匹配根节点,构建输出结构 -->
  <xsl:template match="/">
    <Managers>
      <!-- 遍历并筛选company属性为001的Company节点 -->
      <xsl:for-each select="Root/Company[@company='001']">
        <Manager>
          <!-- 复制Manager节点下的company和cost_center字段 -->
          <xsl:copy-of select="Manager/company"/>
          <xsl:copy-of select="Manager/cost_center"/>
        </Manager>
      </xsl:for-each>
    </Managers>
  </xsl:template>

  <!-- 忽略无关节点和文本 -->
  <xsl:template match="text()|@*"/>
</xsl:stylesheet>

适配说明:

  • 假设输入XML结构为Root节点下包含多个Company节点,Company节点通过company属性标识编号,内部包含Person和Manager子节点;
  • 若输入XML中company是子节点而非属性,将select="Root/Company[@company='001']"修改为select="Root/Company[company='001']"即可。
方案2:使用Groovy脚本实现

以下Groovy脚本可读取输入XML、筛选目标数据并生成指定结构的输出XML:

import groovy.xml.XmlSlurper
import groovy.xml.MarkupBuilder

// 示例输入XML,实际可替换为文件路径读取
def inputXml = '''
<Root>
  <Company company="001">
    <Person>John Doe</Person>
    <Manager>
      <company>001</company>
      <cost_center>CC_001</cost_center>
    </Manager>
  </Company>
  <Company company="002">
    <Person>Jane Smith</Person>
    <Manager>
      <company>002</company>
      <cost_center>CC_002</cost_center>
    </Manager>
  </Company>
</Root>
'''

// 解析输入XML
def root = new XmlSlurper().parseText(inputXml)

// 构建输出XML
def writer = new StringWriter()
def xmlBuilder = new MarkupBuilder(writer)
xmlBuilder.setDoubleQuotes(true)

xmlBuilder.Managers {
  // 筛选上级company为001的Manager
  root.Company.findAll { it.@company == '001' }.each { companyNode ->
    Manager {
      company(companyNode.Manager.company.text())
      cost_center(companyNode.Manager.cost_center.text())
    }
  }
}

// 输出结果(可替换为写入文件)
println writer.toString()

适配说明:

  • 若需读取本地XML文件,将inputXml替换为new File('你的输入文件路径').text;
  • 若输入XML中company是子节点,将it.@company == '001'修改为it.company.text() == '001'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:32:27