正在将XML解析移动到服务器端
Moving XML parsing to server-side
我需要在服务器端解析上传的XML文档。现在我有一些代码可以在客户端工作,但我想把它移到服务器端。我的客户端使用FileReader API,其代码如下:
reader.onload = function (e) {
var InnerLibrary = new String(e.target.result);
if (window.DOMParser) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(InnerLibrary, "text/xml");
console.log("start of xmlDoc console log");
console.log(xmlDoc);
console.log("end of xmlDoc console log");
$(xmlDoc).find('book').each(function () {
console.log("book Found");
console.log(($(this).attr("year")));
version = ($(this).attr("year"));
});
现在,我被引导使用libxmljs来解决其他一些我现在似乎找不到的SO问题。但是这个人说libxmljs会更好,因为这样我就可以使用find()遍历XMLDOM对象,这意味着你不能在xml2js中这样做。
我尝试了libxmljs,但由于某种原因,它给我带来了这个问题中提到的问题:libxmljs在哪里引起问题
所以我想问,我可以在xml2js中使用这种遍历方法吗(我的意思是,使用.find().each().attr(),基本上是这个中使用的所有东西)
如果没有,我应该用什么方法查找数据
UPDATE:我昨天尝试使用xml2js,结果发现它不会将xml文件解析为字符串,它只会将xml从字符串中解析出来。因此,一个额外的问题是:
奖金:我可以在服务器端使用FileReader API吗
由于您使用的是jQuery客户端,因此使用服务器端可能也是最方便的。该端口位于此处,并得到积极维护和使用(每天下载1千次)。请注意,默认情况下安装的是1.8.3
版本,但也支持2.0.0
以下的版本。这就是您指定要使用的版本的方式:
var jquery = require('jquery');
var $ = jquery(null, '1.8.3');
// or use 2.0.0
var $ = jquery(null, '2.0.0');
我还没有测试xml2js,但由于find()
、each()
和attr()
都是jQuery函数,您还可以使用该功能来解析DOM,因为您必须安装它才能使用这三个函数。如果你用npm install jquery
安装了模块,下面是你的使用方法:
// create an instance of the library
var $ = require('jquery').create();
// use the same way as the browser
$(xml).find('book').each(function () {
console.log('book found');
console.log(($(this).attr("year")));
version = ($(this).attr("year"));
});
节点也没有FileReader
API,因为已经存在本机文件系统模块。所有文件I/O都可以使用带有require('fs')
的fs
库执行。
这就是读取文件并将其传递给jQuery进行解析的方法:
var fs = require('fs');
var $ = require('jquery').create();
fs.readFile('/document.xml', function(err, data) {
if (err) throw err;
$(data).find('book').each(function () {
console.log('book found');
console.log(($(this).attr("year")));
var version = ($(this).attr("year"));
});
});
这也可以同步完成:
var fs = require('fs');
var $ = require('jquery').create();
var xml = fs.readFileSync('/document.xml');
$(xml).find('book').each(function () {
console.log('book found');
console.log(($(this).attr("year")));
var version = ($(this).attr("year"));
});
如果不想使用jQuery的Node实现,可以使用较低级别的API,如jsdom和htmlparser,但无论如何都无法使用指定的三个函数。
编辑:在jQuery的Node实现中有一个parseXML()
,但它似乎无法正常工作。以下是使用xmldom
:的替代解决方案
var fs = require('fs');
var $ = require('jquery').create();
var DOMParser = require('xmldom').DOMParser;
var xml = fs.readFileSync('/document.xml');
var doc = DOMParser.parseFromString(xml, 'text/xml');
$(doc).find('book').each(function () {
console.log('book found');
console.log(($(this).attr("year")));
var version = ($(this).attr("year"));
});
您总是可以在节点中运行一个子进程来运行以下内容:
http://xmlsoft.org/xmllint.html
或者像sudhAnsu63建议的任何其他非节点实现的解决方案。然后处理输出。
您可以使用Cxml在C++中解析xml
http://libxmlplusplus.sourceforge.net/docs/manual/html/ar01s02.html#id2504579
http://www.codeproject.com/Articles/111243/Simple-C-XML-Parser
解析完xml后,可以使用GetRootNode()、GetNextChild()遍历xml文件
- 如何使用skip参数使用angular ui引导进行服务器端分页
- Webpack开发服务器和React服务器端渲染
- 提示使用服务器端事件处理程序激活JavaScript
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 将表单数据提交到服务器端
- 使用ajax的服务器端分页&jQuery
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 使用FormData上传AJAX图像;t在服务器端显示图像
- React路由器服务器端渲染和ajax获取数据
- renderReact/Rect Router+Node/Express.js的服务器端/同构渲染中未定义renderP
- Websocket 服务器和移动客户端
- 正在将XML解析移动到服务器端
- 移动站点检测服务器端与客户端
- 是否有可能使用Javascript或任何服务器端技术从移动端源代码中删除HTML的某些部分?
- 移动应用程序和服务器端数据库
- 用于移动应用的rAppid.js——是服务器端渲染的实用工具
- 在phonegap(多平台移动开发)中使用服务器端html+js
- Azure移动服务-服务器端脚本-使用===与零进行比较