gpt4 book ai didi

javascript - JS : Convert xml data to dot array notation

转载 作者:行者123 更新时间:2023-11-28 03:34:08 32 4
gpt4 key购买 nike

我有一个 xml 文件,它是产品列表,并且会重复产品数量。我的问题是我想将 xml 标签转换为点表示法 javascript 数组。

示例 xml 数据:http://a.cdn.searchspring.net/help/feeds/searchspring.xml

预期结果:

[ 
'Products.Product.Product_ID',
'Products.Product.SKU',
'Products.Product.Name'
]

在此示例中,访问产品名称的 xml 数据需要 2 层嵌套。但如果 xml 数据有 5 个嵌套级别,则必须读取最多 5 个嵌套级别。所以它应该取决于 xml 嵌套级别。5 层嵌套 xml 数据的预期结果

[ 
'Products.Product.Categories.Category.Name',
'Products.Product.Categories.Category.Description',
]
import * as parser from 'fast-xml-parser';
import * as fs from 'fs';
import * as path from 'path';

const xmlData = fs.readFileSync(path.resolve('format.xml'), 'utf8');
const tObj = parser.getTraversalObj(xmlData);
const jsonObjects = parser.convertToJson(tObj);

function walk(obj, key = '', response = []) {
Object.keys(obj).forEach(objKey => {
key = key + objKey;
if (!response.includes(key)) {
response.push(key);
}
if (Object.keys(obj[objKey]).length > 0) {
walk(obj[objKey], key, response);
}
});
return response;
}

walk(jsonObjects);

当我尝试运行此代码时,我收到“RangeError:超出最大调用堆栈大小”

最佳答案

我首先会检查是否有嵌套对象,如果没有嵌套对象,则按下实际的键。

function walk(obj, key = '', response = []) {
Object.keys(obj).forEach(objKey => {
var newKey = key + (key && '.') + objKey;
if (obj[objKey] && typeof obj[objKey] === 'object') {
return walk(obj[objKey], newKey, response); // take nested object, not key
}
if (!response.includes(newKey)) { // do you expect duplicates?
response.push(newKey);
}
});
return response;
}

When i try to run this code i got "RangeError: Maximum call stack size exceeded"

对,你取一个字符串(对象的键),任何非空字符串都有属性,每个字符都有一个属性。并且这个字符串被交给下一次递归,结果相同。

console.log(Object.keys("foo"));

关于javascript - JS : Convert xml data to dot array notation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896251/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com