nashwaan / xml-js

Converter utility between XML text and Javascript object / JSON text.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Option to indent attributes

koliyo opened this issue · comments

I would like the option of getting the following output, with each attribute on a separate line with indentation

<parent
  bar=1
  baz="hello"
>
  <child
    attr1="a"
    attr2="b"
  />
</parent>

This is a good request. I will plan to implement it, but expect some delays (1-2 weeks) as I am travelling at the moment.

I have published v1.5.0 that supports new option indentAttributes flag.
So, if the input is:

var js = {
    parent: {
        _attributes: {
            bar: 1,
            baz: 'hello'
        },
        child: {
            _attributes: {
                attr1: 'a',
                attr2: 'b'
            }
        }
    }
};

and using convert.js2xml(js, {indentAttributes: true, spaces: 2, compact: true}), the output will be:

<parent
  bar="1"
  baz="hello"
>
  <child
    attr1="a"
    attr2="b"
  />
</parent>

I hope attributes indentation works correctly for you.


Note, however, that bar="1" (not bar=1 as in your sample output). This is an existing behavior in this library where attribute values should be surrounded by double quotes. This behavior is not related to your new feature request. But if you still think that bar=1 is a better match for the input bar: 1, then I might consider for adding another new option, say noQuotesForNativeAttributes, to produce same output as in your example.

Thanks! Well, noQuotesForNativeAttributes would be nice, but this was the main thing I was looking for :)

I have added noQuotesForNativeAttributes support but as a hidden option (no public documentation) in v1.5.1 because this library doesn't support converting <a bar=1/> back to javascript object.

commented

@nashwaan hello

  • when i set indentAttributes: true

i got

<?xml 
  version="1.0" 
  encoding="utf-8"
?>
<...>

i don't want to indent the first row

Any help would be greatly appreciated