我有一个包含多个项目的 XML 文件,我尝试了几个 xml 到 json 库并选择了 csv-parser。 现在,如果我想在转换对象之前检查对象是否满足我想要的要求,我需要循环遍历项目,然后循环遍历属性标签以查看是否可以找到属性 DisplayType 并检查它的值。
有没有办法告诉 csv-parser 使用“name”属性作为对象的 ID?
有时我会互相插入 5 个 for 循环,这会让人感到困惑。
编辑: 主要目标是过滤 property[@name='DisplayType'] 值为 Weapon 的项目,循环遍历这些项目并执行一些操作。然后对其他特性和属性重复并重复。
在插入数据库之前,我需要过滤、排列和添加数据。
“原始”:
<items>
<item name="Knife">
<property name="HoldType" value="31"/>
<property name="DisplayType" value="Weapon"/>
<property name="Meshfile" value="Items/Misc/parcelPrefab"/>
<property name="Material" value="MresourceCrop"/>
<property name="Stack" value="10"/>
<property name="Value" value="3"/>
<events>
<event name="Testing Events" type="Something"/>
<event name="Testing Events2" type="Something"/>
</events>
</item>
<item name="Knife">
<property name="HoldType" value="31"/>
<property name="DisplayType" value="Weapon"/>
<property name="Meshfile" value="Items/Misc/parcelPrefab"/>
<property name="Material" value="MresourceCrop"/>
<property name="Stack" value="10"/>
<property name="Value" value="3"/>
</item>
</items>
Json(示例):
{
"items": {
"item": [
{
"name": "Knife",
"property": [
{
"name": "HoldType",
"value": "31"
},
{
"name": "DisplayType",
"value": "Weapon"
},
{
"name": "Meshfile",
"value": "Items/Misc/parcelPrefab"
},
{
"name": "Material",
"value": "MresourceCrop"
},
我希望得到什么:
{
"items": {
"Knife": {
"name": "Knife",
"property": [
"HoldType": {
"name": "HoldType",
"value": "31"
},
"DisplayType": {
"name": "DisplayType",
"value": "Weapon"
},
"Meshfile": {
"name": "Meshfile",
"value": "Items/Misc/parcelPrefab"
},
"Material": {
"name": "Material",
"value": "MresourceCrop"
},
最佳答案
你能试试这个吗
const { transform } = require('camaro')
;(async function () {
const xml = `
<items>
<item name="Knife">
<property name="HoldType" value="31"/>
<property name="DisplayType" value="Weapon"/>
<property name="Meshfile" value="Items/Misc/parcelPrefab"/>
<property name="Material" value="MresourceCrop"/>
<property name="Stack" value="10"/>
<property name="Value" value="3"/>
<events>
<event name="Testing Events" type="Something"/>
<event name="Testing Events2" type="Something"/>
</events>
</item>
<item name="Knife">
<property name="HoldType" value="31"/>
<property name="DisplayType" value="Weapon"/>
<property name="Meshfile" value="Items/Misc/parcelPrefab"/>
<property name="Material" value="MresourceCrop"/>
<property name="Stack" value="10"/>
<property name="Value" value="3"/>
</item>
</items>
`
const template = {
items: {
Knife: ['/items/item[@name="Knife"]', {
Name: '@name',
HoldType: 'property[@name="HoldType"]/@value',
DisplayType: 'property[@name="DisplayType"]/@value',
Meshfile: 'property[@name="Meshfile"]/@value',
Material: 'property[@name="Material"]/@value',
Stack: 'property[@name="Stack"]/@value',
Value: 'property[@name="Value"]/@value',
}]
}
}
const result = await transform(xml, template)
console.log(JSON.stringify(result, null, 2))
})()
输出
关于node.js - xml 到 json,有没有办法使用属性的值作为键以便于查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080888/