javascript - 如何在 Javascript 中读取 XML 文件?
问题描述
我正在为 Discord 创建一个机器人。我正在从 Internet 下载星座 XML 文件。XML 文件结构如下:
<?xml version="1.0" encoding="utf-8"?>
<horo>
<date yesterday="04.01.2019" today="05.01.2019" tomorrow="06.01.2019"/>
<aries>
<yesterday>
Text 1
</yesterday>
<today>
Text 2
</today>
<tomorrow>
Text 3
</tomorrow>
</aries>
......
</horo>
我尝试用 javascript 阅读它:
const fs = require('fs');
var HoroscopeData = new Object();
fs.readFile('./module/Horoscope.xml', 'utf8', function(err, data){
if(err) {
console.error("ERROR");
}
console.log("OK");
HoroscopeData = data;
}
console.log(HoroscopeData);
在控制台中,我看到了与 XML 文件中相同的内容
但我不明白如何引用“HoroscopeData”字段。如何返回“aries->today”中的字符串?
解决方案
您可以使用像https://www.npmjs.com/package/xml-js这样的库
要将 XML 转换为 JSON,您可以使用内置的 javascript JSON 函数访问它JSON.parse(target) or JSON.stringify(target)
引用这个包,这里是一个将 XML 转换为 JSON 的简单示例
var convert = require('xml-js');
var xml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
' <title>Happy</title>' +
' <todo>Work</todo>' +
' <todo>Play</todo>' +
'</note>';
var result1 = convert.xml2json(xml, {compact: true, spaces: 4});
var result2 = convert.xml2json(xml, {compact: false, spaces: 4});
console.log(result1, '\n', result2);
如果您不习惯直接在 XML 中工作,这可能会对您有所帮助,因为与 JSON 交互是 JavaScript 很简单。
这是从 xml-js 将您的 XML 转换为的 JSON 中提取所需内容的方法
var convert = require('xml-js');
var xml =
'<?xml version="1.0" encoding="utf-8"?>'+
'<horo>'+
'<date yesterday="04.01.2019" today="05.01.2019" tomorrow="06.01.2019"/>'+
'<aries>'+
'<yesterday>'+
'Text 1'+
'</yesterday>'+
'<today>'+
'Text 2'+
'</today>'+
'<tomorrow>'+
'Text 3'+
'</tomorrow>'+
'</aries>'+
'</horo>';
const rawJSON = convert.xml2json(xml, {compact: true, spaces: 4});
const convertedJSON = JSON.parse(rawJSON);
console.log(convertedJSON.horo.aries.today._text);
推荐阅读
- yaml - 是否可以使用 js-yaml 加载将属性设置为文件引用的 yaml 文件?
- karate - 从通过示例部分传递的 yml 文件驱动的数据在空手道中不起作用
- android - How do I reference a preference option by key in my PreferenceScreen?
- java - 在java中实现一个equals()方法来比较两个用整数填充的对象中的内容
- c# - SignalR 代理到 redis 通道
- git - LibGit2Sharp 相当于:git log release/v21.2.16..release/v21.3.2
- kubernetes - 关于如何使用 kubeadm 设置 kubernetes 集群模式的建议?
- python - 我们可以将 50 多个 Pandas 数据框更改为一张表格中的 excel 并使用 Vlookup 根据键值查看单独的数据框吗
- sql - 如何在从表中过滤选择记录的情况下获取计数百分比
- python - 对包含具有日期时间属性的对象的列表进行排序