javascript - 有没有可能从xml读取每个节点
问题描述
我正在使用 Angular 7。
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<Employees>
<Employee>
<Name>nameOne</Name>
<Id>IdOne</Id>
</Employee>
<Employee>
<Employee-Name>empName</Employee-Name>
</Employee>
<Employee>
<Employee-Id>IdEmp</Employee-Id>
</Employee>
</Employees>
</note>
客户端上传不同的 .XML 文件,每个文件必须有但上传文件中的父节点可能不同..
需要读取每个节点并进行比较有或没有,如果是,那么我们将使用该 id
我的代码
const parser = new xml2js.Parser({ strict: false, trim: true });
parser.parseString(uploadedXMLData, (err, result) => {
const obj: any[] = result;
console.log(result);
Object.entries(obj).forEach((data, index) => {
console.log('Data::: ', data, index);
data[0]['NOTE'].forEach((empData, indexNumber) => {
console.log('Emp Data::: ', empData, indexNumber);
});
});
});
- 但是通过此代码能够获取特定的节点值,例如empData.Employee[1].EmployeeName[1].Employee-Name
- 如何打印每个节点
- 提前致谢
解决方案
要到达每个节点,尽管您需要使用递归的 XML 结构,但如下所示:
function printNode(xml, key?) {
if (xml == null) {
console.log(`Node is empty`);
return;
}
if (Array.isArray(xml)) {
return xml.forEach((v) => printNode(v, key));
}
if (typeof xml === 'object') {
return Object.entries(xml).forEach(([key, v]) => printNode(v, key));
}
console.log(`${key}:${xml}`);
}
推荐阅读
- javascript - dojo 框架中的转轮
- gdb - 如何使 gdb 仅列出调试程序中断时正在执行的线程?
- matlab - CPLEX 错误 5002:%s 不是凸的 - 二进制公式的最小二乘问题
- java - org.springframework.dao.InvalidDataAccessApiUsageException:给定的字符串值:[]无法转换为Json对象
- jquery - 动态添加和删除多个文本框
- javascript - 单击按钮时隐藏 div 并显示 div
- ios - 复制数组中的项目,然后在 swift 中仅在 tableview 中显示每个项目
- python - 为什么未定义 NameError 名称“my_input_value”(Python 2.7)
- php - 在 GitHub 上的 repo 上保存服务器凭据:建议
- arrays - Laravel 合并数组,其中 id 相同