node js xml cdata

需求:在node中 对xml 文件进行处理 对特殊的字段进行 cdata 处理

环境:window + node +webstorm

模块: xml2js

代码:

   

var xml2js = require(‘xml2js‘);
var fs = require(‘fs‘);

var parser = new xml2js.Parser({
                     explicitArray: false,//不使用数组模式
                     ignoreAttrs: false,//不忽略属性
                     strCdkey: "HeadLine,Keyword,DataContent"//自己定义的 特殊key值
                 });
var cBuilder = new xml2js.Builder({
                     cdata: true
                 });

 fs.readFile(‘../public/test.xml‘ , function (err, data) {
                     //data type ==>buffer
                     if (err) {
                        //callback(err)return
                     }
            parser.parseString(data, function (err, result) {
                        if(err){
                        //callback(err) ;//异常回调
                        return;
                       }
                      //开始处理 xml 对象 result --> json格式  打点 . 调用就行了
                      //如:
                      result.Items.Item.FirstCreateTime = new Date();
                      //如果xml文档 items下就一个item  就使用上面方法

//如果xml文档 items下有多个item  就使用下面方法
                      result.Items.Item[0].FirstCreateTime = new Date();
                       //如xml文档中本来就一个 想要追加变成多个  如下处理:
                       result.Items= {"Item" :[result.Items.Item]};
                       result.Items.push( {item 内部结构的 json 格式} );

                      //经过这一步可以将json格式文件转为 xml 格式
                      result = cBuilder.buildObject(result);

                  fs.writeFile("./public/newdemo.xml" , result, function (err) {
                   if(err){
                   //callback(err);
                   return
                  }
                    callback("ok")
                  });

            });
        })

但是  还差一步就可以完成了

对 就是 自己定义的  strCdkey

找到xml2js 模块下lib 的xml2js.js文件修改2个地方a.理论上这个地方可以不追加的 但是测试的时候没有产生效果 

exports.defaults = {
    "0.1": {},“0.2”:{ //最后追加 这个字段          strCdkey:""     }
b.将Builder.prototype.buildObject 方法下的
if (typeof child === ‘string‘ && _this.options.cdata && requiresCDATA(child)) ) {
改为
if (typeof child === ‘string‘ && ((_this.options.cdata && requiresCDATA(child)) || _this.options.strCdkey.indexOf(key) > -1)) {

大功告成!!!

开发时间 20180123 注意版本等

原文地址:https://www.cnblogs.com/WindWall/p/8337188.html

时间: 2024-10-07 19:37:18

node js xml cdata的相关文章

Node.js 的 xml 解析器:XMLDOM

xmldom 是目前node 环境下最靠谱的xml解析器. ------------------ xmldom 是用 JavaScript  实现的 Node.js ,Rhino 和浏览器的 W3C DOM ,完全兼容 W3C DOM level2:部分兼容 level3:支持浏览器的 DOMParser 和 XMLSerializer 接口 安装: npm install xmldom 示例: var DOMParser = require('xmldom').DOMParser; var d

Node.js定时邮件的那些事儿

近开发一个项目,需要在Node.js程序里实现定期给管理员发邮件的功能. 笔者平时只会在Web界面收发邮件.对邮件的原理完全不懂(可能大学教过,然而全忘了),直到要解决这个问题.请教了几个业务的同事,得到的答复是:“你需要搭一个SMTP服务,还要装一个mail agent,巴拉巴拉……” 你们在说什么,我瞎了听不见…… 听起来很复杂,有没有开箱即用的服务啊?一打听还真有.同事告知我司有提供Exchange服务.笔者的内心独白:“Exchange啊,我见过,跟outlook什么关系?”.好在最后还

使用node.js的bodyParser中间件读取post数据解析

昨天我们使用的网关转发数据时出了点问题! 情景是这样的,另一方以Post的形式向我的node.js服务推送JSON数据.但是使用bodyParser中间件后,在req.body中拿不到任何信息. 代码如下: app.use(bodyParser.json()); app.post('/api/*',function(req,res){ _option.onMessage({url:req.url,query:req.query,body:req.body},function(error,data

利用OpenShift托管Node.js Web服务进行微信公众号开发

最近写了一个微信的翻译机器人.用户只要关注该微信号,发送英文的消息,就能收到中文翻译的回复.后台是用Node.js写的,托管在OpenShift的Paas平台上.翻译过程实际上是调用微软的Bing translation API做的,代码中用到了alexu84的bing-translate和JacksonTian的wechat这两个npm模块.下面把做的过程详细说一下. 1. 微信公众号开发 首先是要到https://mp.weixin.qq.com 申请一个公众号,并申请成为开发者.目前个人只

精通Node.js: 你应该阅读的书籍

最开始的几年,在应用服务器编程领域,我存在着一个选择.那时候,我已经远离了C一些时间,喜欢上JavaScript很长时间. 我喜欢JavaScript是因为JavaScript很轻,很优雅,很容易表达我的想法.并且如果我想实现一个可视化的内容,我可以在半小时内通过HTML Css写出一个漂亮的.生动的交互工具,然后把我任何想到的东西扔进去给别人看. 我很喜欢这样写javascript,虽然我知道道上这样写:JavaScript.但是javascript这样的写法让我觉得更加的轻快,虽然javas

Node.JS 学习路线图

转载自:http://www.admin10000.com/document/4624.html 从零开始nodejs系列文章, 将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的 Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮 助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性

node js 常用模块

前100个依赖库里,underscore是属于语言基础类,express是服务器框架,有5.6个测试框架.以及5.6个递归遍历目录树的工具类.3个左右的命令行解析工具类,3个主流数据库的链接client库,2个ws库,多个js/CSS前端处理工具链,3-4个promise库,多个模版库,多个jquery/cavans/dom模拟器以及解析器,一个静态分析器,两个验证库 总得来说,node.js的前100个流行模块应该就可以代表node.js解决问题的问题域 ===================

分享:Node.js静态文件服务器实战

博文共赏:Node.js静态文件服务器实战 作者 田永强 发布于 2011年11月13日 | 12 讨论 [编者按]<博文共赏>是InfoQ中文站新推出的一个专栏,精选来自国内外技术社区和个人博客上的技术文章,让更多的读者朋友受益,本栏目转载的内容都经过原作者授权.文章推荐可以发送邮件到[email protected]. 本文是我对V5Node项目的总结,该项目的特性包括: 项目大多数的文件都是属于静态文件,只有数据部分存在动态请求. 数据部分的请求都呈现为RESTful的特性. 所以项目主

使用Node.js作为后台进行爬虫

看了一遍又一遍Node.js但是没过多久就又忘了,总想找点东西来练练手,就发现B站首页搜索框旁边的GIF图特别有意思,想着是不是可以写一个小Node.js项目把这些图全部扒下来,于是带着复习.预习与探索的姿态就开始吧~ 步骤记录 爬取目标 B站首页右上角搜索框下面的GIF图片 初步流程图 初步流程图 一开始的想法很单纯,既然 每次刷新首页都会随机得到一张GIF动图,这些动图的url地址都没有规律可循,但我可以不断去请求首页URL并将目标图片的地址和标题扒下来,再次请求图片存在本地就好了,再考虑上