在 node.js 中读取大量文件和 xml 到 json
read a lot of file and xml to json in node.js
我完全是 node.js 的菜鸟,我是一名大学研究员。
我有很多 XML 和 JSON 格式的文件,我有很多文件夹和文件,我需要阅读它并创建一个标准(在 JSON/CSV 中),最后将它加载到MySQL 数据库,有什么技巧吗?你知道它的 npm 包或完整的解决方案吗?
有许多包可以将 xml 转换为 json,例如 xmljs
、xml2json
等。
但看起来您也需要转换为标准格式才能插入数据库。
我自己也有这个问题,为此我写了camaro:convert and transform xml to json
我所要做的就是编写一个输出模板,我希望我的 xml 也可以使用如下所示的 xpath 语法进行转换
当然你可以把你需要的所有属性都压平;下面是 camaro 可以做什么的例子。
const transform = require('camaro')
const fs = require('fs')
const xml = fs.readFileSync('examples/ean.xml', 'utf-8')
const template = {
cache_key: '/HotelListResponse/cacheKey',
hotels: ['//HotelSummary', {
hotel_id: 'hotelId',
name: 'name',
rooms: ['RoomRateDetailsList/RoomRateDetails', {
rates: ['RateInfos/RateInfo', {
currency: 'ChargeableRateInfo/@currencyCode',
non_refundable: 'boolean(nonRefundable = "true")',
price: 'number(ChargeableRateInfo/@total)'
}],
room_name: 'roomDescription',
room_type_id: 'roomTypeCode'
}]
}],
session_id: '/HotelListResponse/customerSessionId'
}
const result = transform(xml, template)
谢谢@tuananh
是否可以使用标签的属性作为键或值?我在 attr 中拥有的一些数据值,例如 <name type="sub-name">Hotel name</name>
或 <hotelName id='12345'>Hotel name </name>
可以在 camaro 中执行吗?
而且我没有像 <name type="sub-name">Hotel <nameHotel>Hilton</nameHotel></name>
这样的纯数据 可以删除标签 nameHotel
并将其另存为 {name: 'Hotel Hilton'}
非常感谢
我完全是 node.js 的菜鸟,我是一名大学研究员。 我有很多 XML 和 JSON 格式的文件,我有很多文件夹和文件,我需要阅读它并创建一个标准(在 JSON/CSV 中),最后将它加载到MySQL 数据库,有什么技巧吗?你知道它的 npm 包或完整的解决方案吗?
有许多包可以将 xml 转换为 json,例如 xmljs
、xml2json
等。
但看起来您也需要转换为标准格式才能插入数据库。
我自己也有这个问题,为此我写了camaro:convert and transform xml to json
我所要做的就是编写一个输出模板,我希望我的 xml 也可以使用如下所示的 xpath 语法进行转换
当然你可以把你需要的所有属性都压平;下面是 camaro 可以做什么的例子。
const transform = require('camaro')
const fs = require('fs')
const xml = fs.readFileSync('examples/ean.xml', 'utf-8')
const template = {
cache_key: '/HotelListResponse/cacheKey',
hotels: ['//HotelSummary', {
hotel_id: 'hotelId',
name: 'name',
rooms: ['RoomRateDetailsList/RoomRateDetails', {
rates: ['RateInfos/RateInfo', {
currency: 'ChargeableRateInfo/@currencyCode',
non_refundable: 'boolean(nonRefundable = "true")',
price: 'number(ChargeableRateInfo/@total)'
}],
room_name: 'roomDescription',
room_type_id: 'roomTypeCode'
}]
}],
session_id: '/HotelListResponse/customerSessionId'
}
const result = transform(xml, template)
谢谢@tuananh
是否可以使用标签的属性作为键或值?我在 attr 中拥有的一些数据值,例如 <name type="sub-name">Hotel name</name>
或 <hotelName id='12345'>Hotel name </name>
可以在 camaro 中执行吗?
而且我没有像 <name type="sub-name">Hotel <nameHotel>Hilton</nameHotel></name>
这样的纯数据 可以删除标签 nameHotel
并将其另存为 {name: 'Hotel Hilton'}
非常感谢