Search code examples
javascriptnode.jsxmlxmlhttprequest

Parse response XML data in NodeJS


I have a simple Web response.body from my NodeJS request which is looking like this, and I need to put the ProjectNr and Description in an Array - I tried some parsers but none of them works for me (DomParser etc.) I just don't know what to do, since when I use the .getElementbyName or .getElementbyTagname and search for "ProjectNr" I just get "undefined" as an answer. Please help me. Thanks a lot!

<XYZNetWebService xmlns="http://abcdefs">
<XYZNetResponse Guid="asfdsafdsa23c6" 
LastAccess="2022-02-24" Report="Projects" Parameter="" status="200">
<Project>
    <ProjectNr>505</ProjectNr>
    <Description>Testproject</Description>
</Project>
<Project>
    <ProjectNr>123</ProjectNr>
    <Description>Project2</Description>
</Project>

Solution

  • you can transform with camaro like this

    const { transform } = require('camaro')
    
    async function main() {
        const xml = `
    <XYZNetWebService xmlns="http://abcdefs">
    <XYZNetResponse Guid="asfdsafdsa23c6" 
    LastAccess="2022-02-24" Report="Projects" Parameter="" status="200">
    <Project>
        <ProjectNr>505</ProjectNr>
        <Description>Testproject</Description>
    </Project>
    <Project>
        <ProjectNr>123</ProjectNr>
        <Description>Project2</Description>
    </Project>
    </XYZNetResponse>
    </XYZNetWebService>
    `
    
        const template = {
            projectNr: ['//Project', 'ProjectNr'],
            projectDesc: ['//Project', 'Description']
        }
        const output = await transform(xml, template)
        console.log(output);
    }
    
    main()
    

    output

    {
      projectNr: [ '505', '123' ],
      projectDesc: [ 'Testproject', 'Project2' ]
    }