XMLBuilder: Attributes with undefined values produce odd whitespace when used with format: true (original) (raw)

Description

Using XMLBuilder when the format: true option is on and an array contains a property with undefined as the value it produces odd whitespace formatting. The text is not on the same line as the opening XML tag, and there are several spaces added before the closing tag.

The XML output is correct in how it creates the tags and their attributes, but the whitespace is just all wrong.

Code

const xmlObj = { "list": { "item":[ "one", {"#text": "two"}, {"#text": "three", "@_attr": undefined}, {"#text": "two", "@_attr": "foo"} ] } }; const opts = { ignoreAttributes: false, format: true }; const builder = new fxp.XMLBuilder(opts); console.log(builder.build(xmlObj));

Actual Output

one two three two

Expected Output

one two three two

What I am working on has optional object properties, so I just pass the data to the property as is. Here is my real use case in my TypeScript project

interface IObj { value: string; part?: string; }

function getXmlNodes(dataArr: IObj[]){ const xmlObjs = [];

for(let item of dataArr){ xmlObjs.push({ '#text': item.value, '@_part': item.part, }); }

return xmlObjs; }

Would you like to work on this issue?