javascript - är det möjligt att läsa varje nod från xml


Jag använder 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>
  • Kunder laddar upp olika .XML-filer och varje fil måste ha , men föräldranoden kan vara olika i de uppladdade filerna.

  • behöver läsa varje nod och jämföra om det finns eller inte, om ja så kommer vi att använda det id:t

  • min kod

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);
        });
    });
});
  • Men med denna kod kan man få ett specifikt nodvärde som empData.Employee[1].EmployeeName[1].Employee-Name
  • Hur man skriver ut varje nod
  • tack på förhand

Svar #1

För att nå varje nod, oavsett XML-strukturen, behöver du använda rekursion, som här:

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}`);
}