vue3前端解析xml格式文件为js对象数据,最终解析成Tree数据结构。实现Tree数据增删改节点,然后导出xml格式数据!

1.首先,确保已经安装了xml2js库。如果尚未安装,可以使用以下命令进行安装
npm install xml2js
2.在Vue组件的模板中,添加一个按钮和一个隐藏的文件输入框,用于选择XML文件
<div class="aircraftModelDataInjection">
          <el-button type="primary" @click="AircraftModelDataSelection()">导入XMl</el-button>
          <input type="file" ref="fileInput1" style="display: none" @change="ParsingXMLData">
        </div>
3.请确保你已经正确安装了xml-js库,并在代码中正确导入该库
import * as convert from 'xml-js';
4.导入xml
// 导入Xml
function AircraftModelDataSelection() {
  fileInput1.value.click() // 触发input的点击事件
}

5.关于xml数据解析成js对象数据

// 将 xml 数据解析成 js 数据
function ParsingXMLData(event) {
  const file = event.target.files[0]; // 获取选择的文件
  const reader = new FileReader(); // 创建文件读取器对象
  reader.onload = (e) => {
    const xmlData = e.target.result; // 获取读取的 XML 文件数据
    // 将 XML 转换为 JSON
    const jsonData = convert.xml2json(xmlData, { compact: true, spaces: 4 });
    const newdata = JSON.parse(jsonData)
    // 获取 unifiedData,假设它是 newdata.modelInfo.Component 的值
    const unifiedData = newdata.modelInfo.Component;
    // 将 newdata 对象转换为 Tree 数据结构
    const treeData = convertToTree(unifiedData);
    //  新数组构造
    const treeNewData = [
      {
        label: newdata.modelInfo._attributes.modelType,
        children: treeData
      }
    ]
    Tree.value = treeNewData
  };
  reader.readAsText(file); // 以文本形式读取文件内容
}
6.将 JavaScript 对象转换为 Tree 数据结构
// 将 JavaScript 对象转换为 Tree 数据结构
function convertToTree(data) {
  const rootNode = {
    label: '',
    children: []
  };

  if (data.length > 0) {
    rootNode.children = data.map(item => {
      const node = {
        label: item._attributes?.name || '',
        children: []
      };

      if (item.Product && item.Product.length > 0) {
        node.children = convertToTree(item.Product);
      }

      return node;
    });
  }

  return rootNode.children;
}

最终我是解析成我想要的Tree数据类型

可以对以上Tree数据节点实现增删改,然后导出XML格式数据

7.将 Tree 数据结构转换为 XML 数据结构
// 将 Tree 数据结构转换为 XML 数据结构
function convertToXmlData(data) {
  const xmlNode = {
    _attributes: {
      name: data.label
    }
  };

  if (data.children && data.children.length > 0) {
    xmlNode.Product = data.children.map(child => convertToXmlData(child));
  }

  return xmlNode;
}
8.导出 XML 文件
// 导出 XML 文件
function ExportXml() {
  const jsonData = Tree.value; // 假设 Tree.value 包含要导出为 XML 的数据

  // 构造根节点
  const rootElement = {
    _attributes: {
      modelType: jsonData[0].label
    },
    Component: convertToXmlData(jsonData[0])
  };

  // 将 JavaScript 对象转换为 XML 字符串
  const xmlData = convert.js2xml(rootElement, { compact: true, ignoreComment: true, spaces: 2 });

  // 创建并下载 XML 文件
  const xmlBlob = new Blob([xmlData], { type: 'text/xml' });
  const exportLink = document.createElement('a');
  exportLink.href = URL.createObjectURL(xmlBlob);
  exportLink.download = 'export.xml';
  exportLink.click();
}

导出后

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用以下步骤来实现文件导入导出功能: 1. 安装 antd 和 xlsx 库 ``` npm install ant-design-vue xlsx --save ``` 2. 在 Vue 组件中引入 antd 和 xlsx ```javascript import { Button, Upload, message } from 'ant-design-vue'; import XLSX from 'xlsx'; ``` 3. 在 Vue 组件中添加上传组件和下载按钮 ```html <template> <div> <a-button type="primary" @click="downloadExcel">下载Excel模板</a-button> <a-upload :before-upload="beforeUpload" :show-upload-list="false"> <a-button>上传Excel文件</a-button> </a-upload> </div> </template> ``` 4. 实现下载 Excel 模板功能 ```javascript downloadExcel() { const fileName = 'example.xlsx'; const headers = ['姓名', '年龄', '性别']; const data = [['张三', 18, '男'], ['李四', 20, '女'], ['王五', 22, '男']]; const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data]); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSX.writeFile(workbook, fileName); } ``` 5. 实现上传 Excel 文件功能 ```javascript beforeUpload(file) { const reader = new FileReader(); reader.onload = (e) => { const data = e.target.result; const workbook = XLSX.read(data, { type: 'binary' }); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; const headers = ['姓名', '年龄', '性别']; const fields = ['name', 'age', 'gender']; const records = XLSX.utils.sheet_to_json(worksheet, { header: headers, range: 1 }); const valid = records.every((record) => fields.every((field) => record[field])); if (valid) { // 调用后端接口保存数据 message.success('上传功'); } else { message.error('上传失败,请检查文件格式'); } }; reader.readAsBinaryString(file); return false; } ``` 在 beforeUpload 方法中,我们使用 FileReader 对象读取上传的文件内容,并使用 XLSX 库解析 Excel 文件。如果文件格式正确,就将数据传递给后端接口进行保存,否则提示用户上传失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值