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

基于UTENTE和ESERCIZIO匹配,批量填充esercizi.xml的MASSIMALE字段

需求说明
  • 从massimali.xml中提取MASSIMALE字段值,填充到esercizi.xml中所有UTENTE与ESERCIZIO字段均匹配的<massimale>标签内
  • 此前方案仅能填充首个匹配条目,无法覆盖同一用户同一训练项目的所有对应行

示例效果

<?xml version="1.0"?>
<sessioni>
  <sessione position="1">
    <id>1739616101355231</id>
    <index>1</index>
    <nome_sessione>3</nome_sessione>
    <utente>USER1</utente>    <!-- 与massimali.xml中的USER1匹配 -->
    <esercizio>BENCH PRESS</esercizio> <!-- 与massimali.xml中的训练项目匹配 -->
    <rep_sessione>1</rep_sessione>
    <percent_sessione>50</percent_sessione>
    <massimale>100</massimale> <!-- 从massimali.xml加载的值 -->

附文件内容

esercizi.xml

<?xml version="1.0"?>
<sessioni>
  <sessione position="1">
    <id>1739616101355231</id>
    <index>1</index>
    <nome_sessione>3</nome_sessione>
    <utente>USER1</utente>
    <esercizio>BENCH PRESS</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>50</percent_sessione>
    <massimale/>
  </sessione>
  <sessione position="2">
    <id>1739616101355231</id>
    <index>2</index>
    <nome_sessione>3</nome_sessione>
    <utente>USER1</utente>
    <esercizio>BENCH PRESS</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>65</percent_sessione>
    <massimale/>
  </sessione>
  <sessione position="3">
    <id>1739616101355231</id>
    <index>3</index>
    <nome_sessione>3</nome_sessione>
    <utente>USER1</utente>
    <esercizio>BENCH PRESS</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>75</percent_sessione>
    <massimale/>
  </sessione>
  <sessione position="4">
    <id>1739616101355231</id>
    <index>4</index>
    <nome_sessione>3</nome_sessione>
    <utente>USER1</utente>
    <esercizio>BENCH PRESS</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>80</percent_sessione>
    <massimale/>
  </sessione>
  <sessione position="5">
    <id>1739720496368387</id>
    <index>5</index>
    <nome_sessione>1</nome_sessione>
    <utente>USER2</utente>
    <esercizio>BACK SQUAT</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>65</percent_sessione>
    <massimale/>
  </sessione>
  <sessione position="6">
    <id>1739720496368387</id>
    <index>6</index>
    <nome_sessione>1</nome_sessione>
    <utente>USER2</utente>
    <esercizio>BACK SQUAT</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>75</percent_sessione>
    <massimale/>
  </sessione>
  <sessione position="7">
    <id>1739720496368387</id>
    <index>7</index>
    <nome_sessione>1</nome_sessione>
    <utente>USER2</utente>
    <esercizio>BACK SQUAT</esercizio>
    <rep_sessione>1</rep_sessione>
    <percent_sessione>85</percent_sessione>
    <massimale/>
  </sessione>
</sessioni>

massimali.xml

<?xml version="1.0"?>
<massimali>
  <atleta position="1">
    <id>1739616101355231</id>
    <utente>USER1</utente>
    <esercizio>BENCH PRESS</esercizio>
    <massimale>100</massimale>
    <data>2022-07-30</data>
  </atleta>
  <atleta position="2">
    <id>1739720496368387</id>
    <utente>USER1</utente>
    <esercizio>BACK SQUAT</esercizio>
    <massimale>80</massimale>
    <data>2022-07-30</data>
  </atleta>
  <atleta position="3">
    <id>1739720496368387</id>
    <utente>USER2</utente>
    <esercizio>BACK SQUAT</esercizio>
    <massimale>100</massimale>
    <data>2022-07-30</data>
  </atleta>
  <atleta position="4">
    <id>1739616101355231</id>
    <utente>USER2</utente>
    <esercizio>BENCH PRESS</esercizio>
    <massimale>95</massimale>
    <data>2022-07-30</data>
  </atleta>
</massimali>

解决方案

用XSLT处理这类XML数据匹配和填充是最直接的方式,以下是能实现批量填充所有匹配条目的脚本:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 复制原文档所有未修改的内容 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 处理esercizi.xml中的空massimale标签 -->
  <xsl:template match="massimale[not(node())]">
    <massimale>
      <!-- 从massimali.xml匹配对应用户和训练项目的最大值 -->
      <xsl:value-of select="document('massimali.xml')/massimali/atleta[utente=../../utente and esercizio=../../esercizio]/massimale"/>
    </massimale>
  </xsl:template>
</xsl:stylesheet>

执行步骤

  1. 把上面的XSLT代码保存为fill_massimale.xsl文件
  2. 用任意XSLT处理器执行转换,比如用Saxon的命令行:
    java -jar saxon-he-12.4.jar -s:esercizi.xml -xsl:fill_massimale.xsl -o:esercizi_updated.xml
    

这个脚本会遍历esercizi.xml中所有条目,只要用户(utente)和训练项目(esercizio)与massimali.xml中的条目匹配,就会把对应的最大值填充到<massimale>标签里,不会遗漏任何匹配行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:24:18