【问题标题】:is there any possible to read each node from xml有没有可能从xml读取每个节点
【发布时间】:2020-11-13 02:20:50
【问题描述】:

我正在使用 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
  • 如何打印每个节点
  • 提前致谢

【问题讨论】:

    标签: javascript angular typescript angular7


    【解决方案1】:

    要到达 每个 节点,尽管您需要使用递归的 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}`);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多