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

XML解析忽略特殊字符:零件号匹配功能异常求助

问题背景

我需要解析特定XML文件,忽略其中零件号的特殊字符(具体为连字符-),将其与CSV文件中的零件号匹配,输出对应的品牌ID。目前CSV中的零件号不含特殊字符,但XML中的零件号带有-,现有代码功能正常,唯独无法处理这种带特殊字符的匹配问题。

现有代码
const path = require("path");
const fs = require("fs");
const parser = require('xml2json');
const { parseList } = require("./utils/helpers");
const lodash = require("lodash");
const csv = require("fast-csv");
const file ='4E-2022-10-24-Pies';
const PiesfilePath = path.resolve(
  __dirname,
  `${file}.xml`
);
const imagefilePath = path.resolve(
  __dirname,
  "4E-2022-10-24-Image.csv"
);

const output = fs.createWriteStream(
  `images-map.txt`,
  {
    flags: "a",
  }
);
//output.write('B15 B20 P05 P10 P15\n');

const timer = ms => new Promise(resolve => setTimeout(resolve, ms));

const init = async () => {
  var PIEs='';
   const ImagesArray = await parseList(imagefilePath);
   const digitalAssets = [];


 fs.readFile( PiesfilePath, function(err, data) {
     PIEs = parser.toJson(data);

     PIEs = JSON.parse(PIEs);
   //  console.log(PIEs.PIES.Items);
     for (let i = 0; i <PIEs.PIES.Items.Item.length ; i += 1) { //
      let item = PIEs.PIES.Items.Item[i];
    //  if(item?.DigitalAssets){
      digitalAssets.push({
        "PartNumber":item.PartNumber,
        "BrandAAIAID": item.BrandAAIAID,
      })


     // console.log(item);
     }


const digitalAssetsDic =  lodash.mapKeys(digitalAssets, "PartNumber");


     for (let z = 0; z <ImagesArray.length ; z += 1) { 
      let Image= ImagesArray[z]; 
      let digitalAsset = digitalAssetsDic[Image.PartNumber];
      if(digitalAsset){
        let imagefile = Image.ImageName;
        
        output.write(`${Image.PartNumber} ${digitalAsset.BrandAAIAID} ${imagefile} ${imagefile.includes('_Fro')?'P04':'P01'} ${imagefile.split(".")[1]}\n`);

      }

     }


   // 
 });

 
  //let productsfull = await parseList(inputPath2);
  //const productsDec= lodash.mapKeys(products,"itemId");


};

init();
解决方案

核心思路是统一零件号格式:将XML中的零件号移除所有连字符-后构建匹配字典,同时为了兼容后续数据变化,查找时对CSV的零件号也做相同处理(当前CSV无特殊字符,处理后不影响结果)。

修改后的完整代码

const path = require("path");
const fs = require("fs");
const parser = require('xml2json');
const { parseList } = require("./utils/helpers");
const lodash = require("lodash");
const csv = require("fast-csv");
const file ='4E-2022-10-24-Pies';
const PiesfilePath = path.resolve(
  __dirname,
  `${file}.xml`
);
const imagefilePath = path.resolve(
  __dirname,
  "4E-2022-10-24-Image.csv"
);

const output = fs.createWriteStream(
  `images-map.txt`,
  {
    flags: "a",
  }
);
//output.write('B15 B20 P05 P10 P15\n');

const timer = ms => new Promise(resolve => setTimeout(resolve, ms));

const init = async () => {
  var PIEs='';
   const ImagesArray = await parseList(imagefilePath);
   const digitalAssets = [];


 fs.readFile( PiesfilePath, function(err, data) {
     PIEs = parser.toJson(data);

     PIEs = JSON.parse(PIEs);
     for (let i = 0; i <PIEs.PIES.Items.Item.length ; i += 1) {
      let item = PIEs.PIES.Items.Item[i];
      // 移除XML零件号中的所有连字符
      digitalAssets.push({
        "PartNumber": item.PartNumber.replace(/-/g, ''),
        "BrandAAIAID": item.BrandAAIAID,
      })
     }

// 用处理后的零件号构建匹配字典
const digitalAssetsDic =  lodash.mapKeys(digitalAssets, "PartNumber");

     for (let z = 0; z <ImagesArray.length ; z += 1) { 
      let Image= ImagesArray[z]; 
      // 查找时统一处理CSV零件号格式(兼容后续可能出现的特殊字符)
      let digitalAsset = digitalAssetsDic[Image.PartNumber.replace(/-/g, '')];
      if(digitalAsset){
        let imagefile = Image.ImageName;
        
        output.write(`${Image.PartNumber} ${digitalAsset.BrandAAIAID} ${imagefile} ${imagefile.includes('_Fro')?'P04':'P01'} ${imagefile.split(".")[1]}\n`);

      }

     }
 });
};

init();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:50:19