node.js 读目录.txt文件,用 xml2js 转换为json数据,生成jstree所需的文件

使用Node.js处理XML编程 Node.js是一个基于Chrome V8引擎的JavaScript运行时,它提供了处理XML的强大工具和库。无论您是在构建Web服务还是进行数据交换,处理XML的能力都是非常重要的,Node.js为我们提供了强大的工具来实现这一点。这些库允许我们将XML数据解析为JavaScript对象,或者将JavaScript对象转换为XML数据。解析后的JavaScript对象包含了XML中的数据,我们可以通过对象的属性访问它们。要在Node.js中处理XML,我们可以使用许多现有的库,其中最流行的是。 阅读详情

请参阅:java : pdfbox 读取 PDF文件内书签

请注意:书的目录.txt 编码:UTF-8,推荐用 Notepad++ 转换编码。

npm install elementtree ;

npm install xml2js ;

node.js 用 elementtree读目录.txt文件,用 xml2js 转换为json数据,ejs 生成 jstree模板所需的文件。

编写 txt_etree_json.js  如下

// 读目录.txt文件,用xml2js 转换为json数据,生成jstree所需的文件
let fs = require('fs');
let process = require('process');
let path = require('path');
let readline = require('readline');
let et = require('elementtree');
let XML = et.XML;
let ElementTree = et.ElementTree;
//  element = et.Element;
let subElement = et.SubElement;
let xml2js = require('xml2js');
let ejs = require('ejs');

if (process.argv.length <3){
    console.error("usage: node txt_etree_json.js file1.txt");
    return 1;
}
let file1 = process.argv[2];
if (! fs.statSync(file1).isFile()) {
    console.error("it is not File.");
    return 2;
}
let ext = path.extname(file1);
if (ext.toLowerCase() != '.txt'){
    console.error(ext +" is not .txt");
    return 3;
}

let file2 = file1.replace('.txt', '.htm');
console.log(file2);
let fRead = fs.createReadStream(file1);
let fWrite = fs.createWriteStream(file2);
// 创建readline接口实例
let rline = readline.createInterface({
    input: fRead,
//  output: fWrite,
    terminal: true
});

// 用缩排表现层级关系,假设最多5个层级
const indent1 ="  ";
const indent2 ="    ";
const indent3 ="      ";
const indent4 ="        ";

var txt, title, root, state, p_node, node1, node2, node3, node4, node5;
// line 事件
let ln =1;
rline.on('line', function(line){
    txt = line.trim();
    if (ln ==1){
        // 读取第一行:书名
        title = txt;
        // 创建主题节点
        root = et.Element("node");
        root.set('id', '1');
        root.set('text', txt);
        // 定义状态:
        state = subElement(root, "state")
        state.set("opened", 'true')
        state.set("disabled", 'true')
    }
    txt = txt.slice(0,-3); // 去掉行尾的页数
    if (txt.length ==0 || ln==1) ;
    else if (txt.length >0 && line.slice(0,1) !=' '){
        // 创建主题的子节点(1级节点)
        node1 = subElement(root, "children");
        node1.set('id', String(ln));
        node1.set('text', txt);
        p_node = node1; // 寄存父节点
    }
    else if (line.startsWith(indent1) && line.slice(2,3) !=' '){
        // 创建node1的子节点(2级节点)
        if (node1) node2 = subElement(node1, "children");
        else node2 = subElement(root, "children");
        node2.set('id', String(ln));
        node2.set('text', txt);
        p_node = node2;
    }
    else if (line.startsWith(indent2) && line.slice(4,5) !=' '){    
        // 创建node2的子节点(3级节点)
        if (node2) node3 = subElement(node2, "children");
        else if(node1) node3 = subElement(node1, "children");
        else node3 = subElement(root, "children");
        node3.set('id', String(ln));
        node3.set('text', txt);
        p_node = node3;
    }
    else if (line.startsWith(indent3) && line.slice(6,7) !=' '){
        // 创建node3的子节点(4级节点)
        if (node3) node4 = subElement(node3, "children");
        else if (node2) node4 = subElement(node2, "children");
        else if (node1) node4 = subElement(node1, "children");
        else node4 = subElement(root, "children");
        node4.set('id', String(ln));
        node4.set('text', txt);
        p_node = node4;
    }
    else if (line.startsWith(indent4) && line.slice(8,9) !=' '){
        // 创建node4的子节点(5级节点)
        if (node4) node5 = subElement(node4, "children");
        else if (p_node) node5 = subElement(p_node, "children");
        else node5 = subElement(root, "children");
        node5.set('id', String(ln));
        node5.set('text', txt);
    }
    else {
        console.log(txt);
    }
    ln++;
});
// 官网 www.npmjs.com/package/xml2js 查找 Options
//  Parser 用于解析xml为json对象 
let parser = new xml2js.Parser({explicitArray:false, mergeAttrs:true});
var etree, xml, json_str;
let filename ="jstree_template.htm";
rline.on('close', function(){
    etree = new ElementTree(root);
    xml = etree.write({'xml_declaration': false});
    parser.parseString(xml, function(err,res){
        if (err) throw err;
        //console.dir(res);
        json_str = '['+ JSON.stringify(res['node'], null,2) +']';
    });
    // 官网 ejs.bootcss.com/#docs  <%- 输出非转义的数据到模板 %>
  //ejs.renderFile(filename, data, options, function(err, str){
    ejs.renderFile(filename, {title:title, mydir:json_str}, {}, function(err, str){
        // str => 输出渲染后的 HTML 字符串
        fWrite.write(str);
    });    
    console.log("line number: "+ln);
});

https://gitee.com/ 搜索 jstree 下载

https://gitee.com/mirrors/jstree?_from=gitee_search
git clone https://gitee.com/mirrors/jstree.git

编写 jstree_template.htm  如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title><%= title%></title>
  <script src="../js/jquery-3.2.1.min.js"></script>
  <link rel="stylesheet" href="../js/jstree/dist/themes/default/style.css" />
  <script src="../js/jstree/dist/jstree.min.js"></script>
</head>
<body>
  <!-- 搜索框 -->
  <div class="search_input">
  <input type="text" id="search_a" />
  <img src="../js/jstree/dist/search.png" />
  </div>
  <div id="treeview1" class="treeview">
  </div>
<script type="text/javascript">
  var mydir = <%- mydir%>;
  $("#treeview1").jstree({
    'core' : {
    "multiple" : false,
    'data' : mydir,
    'dblclick_toggle': true
    },
    "plugins" : ["search"]
  });
  //输入框输入时自动搜索
  var tout = false;
  $('#search_a').keyup(function(){
    if (tout) clearTimeout(tout);    
    tout = setTimeout(function(){
      $('#treeview1').jstree(true).search($('#search_a').val());   
    }, 250);
  });   
</script> 
</body>
</html>

运行 node txt_etree_json.js your_pdf_dir.txt

生成 your_pdf_dir.htm

JS中简单实现 xml转json 导入即可使用 JS中超级简单xml转json 导入即可使用在网上找了一大队xml转换json 都是又长有不可用,乱七八糟 最后只能自己些了简单方便,传入即可使用运行效果 如图。 阅读详情

相关推荐

Node.js 使用递归实现遍历文件夹中所有文件

主要介绍了Node.js使用递归实现遍历文件夹中所有文件,需要的朋友可以参考下

JavaScript将XML转成JSON的方法

上面的menu.json文件改成menu.xml文件后,这些代码需要改的什么?json转换成XML后,对应的JS文件要怎么改?

2747

Oracle19c-集群节点重新添加

Oracle RAC集群在极端情况下,如硬件、主机,集群软件损坏,导致集群节点永久无法使用,需要对集群节点进行修复,删除节点集群信息并重新加入集群,以恢复集群原有的架构。 本文主要讲述一套两节点的Oracle19c RAC集群,节点一orcl01由于主机异常无法正常启动,在对主机进行重装之后,需要将orcl01节点重新加入集群的操作步骤。环境信息: 操作系统:Linux 7 RAC集群:19C 主机节点:orcl0...

sinat_36757755的博客 2352

Node JS 使用 xml2js 解析 xml 数据格式

我最近在弄一个 docx文档的处理工具,docx 文档的数据储存方式其实就是 xml , 首先我直接找了轮子,毕竟 docx 文档的 xml 不是给正常人看的,现在好像比较强的是 xml2js NPM 安装地址:https://www.npmjs.com/package/xml2js GitHub:https://github.com/Leonidas-from-XIV/node-xml2js 这个轮子使用起来还是比较舒服的,开头我还是先简单翻译一下文档 npm 安装 npm insta..

hsany330的专栏 7718

云计算虚拟化实验(一)——虚拟机软件VMware的安装以及虚拟机系统的安装(Windows7+CentOS7)

主要内容: 1、虚拟机软件的安装(以VMware为例) 2、虚拟机系统的安装(Window7 + CentOS7) 3、虚拟主机网络互访 4、不同局域网内的虚拟主机互访(软路由——海蜘蛛) 0 ——首先介绍一下什么是虚拟化? 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在

gg_asd的博客 1万+

opencv实现“找茬”

// 111.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using namespace std; #define CVX_RED CV_RGB(0xff,0x00,0x00) #define CVX_BLUE CV_RGB(0x00,0x00,0xff)//定义宏,轮廓边框颜色 in

yanHa007的专栏 2094

Node.js XML转JSON神器:node-xml2js完全指南

```markdown ├── example # 示例代码存放目录 │ └── ... ├── lib # 核心库代码,包含解析和构建XML的逻辑 │ ├── builder.js # XML构建器,负责将JavaScript对象转换回XML格式 │ ├── parser.js # 解析器,将XML字符串解析为JavaSc...

gitblog_00310的博客 855

ComfyUI安装包运行前准备:增加虚拟内存

在Windows系统中,虚拟内存是一种重要的系统资源管理机制,它主要通过将硬盘空间用作内存来扩展系统的可用内存容量。以下是虚拟内存的主要作用: 1. 扩展物理内存容量 当物理内存(RAM)不足时,系统会将一部分数据从内存转移到硬盘上的虚拟内存区域(也称为“分页文件”或“交换文件”)。这样可以为正在运行的程序提供额外的“内存空间”,确保系统能够继续运行,而不会因为内存不足而崩溃。 2. 提高系统稳定性 虚拟内存为系统提供了一个缓冲区。如果没有虚拟内存...

聚梦小课堂 1万+

node.js的xml和json相互转换-xml2js

首先安装xml2js npm install xml2js 引入包: const xml2js = require('xml2js'); xml转json var xml = "<root>Hello xml2js!</root>" var parseString = require('xml2js').parseString; parseString(xm...

chdyiboke的博客 5335

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 332

动手在 SAP BTP Cloud Foundry 开发和部署 SAP UI5 应用的前置条件 - 订阅 SAP Build Work Zone Standard Version

摘要:本文介绍了SAP BTP Cloud Foundry环境中HTML5应用的概念,区分了web应用、HTML5应用和SAP UI5应用的关系。重点说明了在Cloud Foundry环境部署HTML5应用的方法是通过订阅SAP Build Work Zone standard edition服务,并详细描述了订阅过程中可能遇到的"OIDC trust missing"错误。该错误是由于业务用户认证需要配置SAP Cloud Identity Services的OpenID Connec

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 312

nodeJs xml&json格式数据互相转换

依赖于 xml2js。

weixin_44126958的博客 317

AI原生SaaS应用的自动化运维体系构建

随着ChatGPT掀起的AI原生应用浪潮,越来越多SaaS(软件即服务)产品开始以"AI优先"的方式设计——从用户交互到核心功能,都深度依赖机器学习模型(如推荐算法、智能客服)、实时数据流(如用户行为分析)和弹性算力(如大模型推理)。这类应用的运维需求与传统SaaS完全不同:传统运维像"修水管",哪里漏了补哪里;AI原生运维则像"照顾会成长的宠物",需要实时感知模型状态、数据变化和流量波动,主动调整资源。

AI天才研究院 1080

Nodejs xml与JSON互转,本人亲测有效!!!

第一种方法: 1、安装cnpm i X2JS --save 2、importX2JSfrom'X2JS' 3、转换 xml转json 第二种方法: 1、安装cnpm i xml2js --save 2、importxml2jsfrom'xml2js' //xml转json varparser=newxml2js.Parser(/*options*/); parser.parseStringPromise(data).then(function(result)...

IT侠客行的博客 1万+

【AI大模型应用开发】【LlamaIndex教程】2. 存储模块:如何在 LlamaIndex 中使用自定义的向量数据库?(附代码)

前面文章两行代码就实现了文档的切分和向量化存储以及持久化存储。如果我们想用自定义的向量化数据库呢?

同学小张的博客 2117

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【亲测免费】 推荐:Node.js的XML解析库 - node-xml2js

如果你在寻找一个轻量级、易于使用的Node.js库来处理XML数据,那么你需要了解一下。 ## 项目简介 是一个非常实用的Node.js模块,它将XML转换为JavaScript对象,反之亦然。这意味着你可以轻松地将XML数据集成到你的Node.js应用程序中,并以JSON或其他JavaScript结构的形式使用这些数据。 ## 应用场景 node-xml2js可以用于各种需要处理XML数...

gitblog_00003的博客 1146

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

node-xml2js 使用教程

`node-xml2js` 是一个用于 Node.js 的 XML 解析库,它可以将 XML 数据转换为 JavaScript 对象,反之亦然。这个库非常实用,特别是在需要处理 XML 数据的 Node.js 应用程序中。`node-xml2js` 使用了 `sax-js` 和 `xmlbuilder-js` 这两个工具库,支持双向转换,使得 XML 数据的处理变得简单易用。 ## 项目快速启动...

gitblog_00894的博客 1218

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

node-xml2json: 将XML转换为JSON的Node.js库

node-xml2json: 将XML转换为JSON的Node.js库 项目链接: 在许多现代开发场景中,JSON已经成为数据交换的标准格式。然而,在处理来自旧系统或特定API的数据时,我们仍然会遇到XML。在这种情况下,将XML转换为JSON变得至关重要。 node-xml2json是一个轻量级、高效的Node.js库,可以方便地将XML字符串或文件转换为JSON对象。它具有易于使用的API...

gitblog_00031的博客 1206

node-xml2js 安装和配置指南

### 项目介绍 `node-xml2js` 是一个用于 Node.js 的 XML 解析库,它可以将 XML 数据转换为 JavaScript 对象,反之亦然。这个库非常实用,特别适合需要处理 XML 数据的 Node.js 项目。 ### 主要编程语言 该项目主要使用 JavaScript 编写,适用于 Node.js 环境。 ## 2. 项目使用的关键技术和框架 ### 关键技术 - ...

gitblog_07349的博客 720

ts-node 实现文件夹下xml文件转化为JSON格式,并压缩为ZIP

【代码】ts-node 实现文件夹下xml文件转化为JSON格式,并压缩为ZIP。

dyjffgkvfg的博客 672

[node.js]node.js三种xml转josn解析方式

请求头支持xml格式的 : body-parser-xml 1.接收的xml格式转为josn并获取其中的字段 var xmljosnstr=JSON.stringify(req.body); var xmljosn =JSON.parse(xmljosnstr); console.log(xmljosn); console.log(xmljosn["MPD"]["$"]["type"]); 2.读取本地xml二进制流->josn和本地josn二进制流-<jo...

futurismme的专栏 1111

前端项目:XML字符串 与 JSON 字符串 互转

1. 安装依赖: npm 或 yarn。2. vue2 或 vue3 全局使用。3. vue2 或 vue3 局部使用。

Smile_Gently的博客 951

Nodejs读取并解析xml的DOM

已知一个用于描述文件系统(文件树)的xml. 使用Nodejs通过递归的方式将该文件转换为可被bootstrap-treeview识别的json文件

李文韬的博客 3999

Node模块—xml2js

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34242658的博客 802

nodejs解析xml文件(xml->json)

nodejs解析xml文件(xml->json) nodejs解析xml文件的方式有很多: xml2j xmlreader xmldom+xpath xmldoc xml-js … 点击可自行访问官网,里面有用法示例,在此不再进行赘述。今天在开发中要解析的xml文件内容如下: <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C148

slient_love的博客 9017

vbs读取xml文件内容_用nodejs xml2js读取xml文件

我有这样一个存储了配置信息的xml文件:读取这个配置文件的JavaScript代码,使用了nodejs里的xml2js模块:const fs = require('fs');var path = require('path');var configPath = path.join(__dirname, 'koiFieldList.xml');var configString = fs.readFi...

weixin_39806065的博客 258
上一篇: python:lxml 读目录.txt文件,用 xmltodict 转换为json数据,生成jstree所需的文件
下一篇: python:xml.etree 生成思维导图 Freemind文件
belldeep
博客等级 码龄20年 1820粉丝 584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值