javascript - Node JS 的 SQL 外部化(XML 解析)

标签 javascript xml node.js parsing

假设我有以下文件:

<sql-requests>
  <sql-request id="insert_product"><![CDATA[INSERT INTO products]]></sql-request>
  <sql-request id="insert_account"><![CDATA[INSERT INTO accounts]]></sql-request>
  <sql-request id="insert_news"><![CDATA[INSERT INTO news]]></sql-request>
</sql-requests>

我想在 Node 中解析这个xml,然后像这样访问CDATA:

var sql = parsedXml.insert_product; // must return 'INSERT INTO products

最好的方法是什么?根据我的喜好,我应该使用哪个包?我找不到可以读取 CDATA 值的包。

回答(非常感谢 Felix 提供了如何做到这一点的想法)

var parseString = require('xml2js').parseString;
var fs = require('fs');
var content = fs.readFileSync(__dirname + '/sql-requests.xml');

var sql = {};

parseString(content, function (err, result) {

var queries = result['sql-requests']['sql-request'];

queries.forEach(function(query){
    var id = query.$.id, request = query._.trim();
    sql[id] = request;
});

});

现在,sql["insert_product"] 将返回 INSERT INTO products

最佳答案

我不知道是否有一个 XML 解析器可以创建 id -> element 映射,但是 xml2js 肯定可以与 CDATA 部分一起使用,并且您可以轻松创建这样的假设您的结构与问题中一样简单,请绘制自己的 map :

var parseString = require('xml2js').parseString;

parseString(xml, function (err, result) {
  var queries = result['sql-requests']['sql-request'].reduce(queries, query) {
      queries[query.$.id] = query._;
      return queries;
  }, {});
  // queries is not an id -> content map
});

关于javascript - Node JS 的 SQL 外部化(XML 解析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131304/

相关文章:

node.js - nodejs : fs. 访问未定义

node.js - 使用机器学习预测农产品价格

javascript - 在 JavaScript 中解析 OData 元数据

Javascript Sweet Alert 和文本中的 html 链接

xml - 当 responseText 包含有效的 Xml 时,IXMLHttpRequest.responseXml 为空,没有解析错误

Android约束布局,有重量的观点?

javascript - Protractor :测试套件完成后清理

javascript - 使用 Javascript 在没有提示的情况下在 Photoshop 中保存文件?

java - Java 对象的 XML 模式定义 (XSD) 中的继承

node.js - 警告,缺少 FIREBASE_CONFIG 环境变量。初始化 firebase-admin 将失败