martinblech / xmltodict

Python module that makes working with XML feel like you are working with JSON
MIT License
5.49k stars 462 forks source link

dict to xml - how to discard the parent tag repeating for conversion from list #315

Open sergei-sss opened 1 year ago

sergei-sss commented 1 year ago

Hi everyone.

From this dictionary:

feed = {
    'feed': {
        'reviewer_images': [
            {
                'reviewer_image': {
                    'url': "http://google.com"
                }
            },
            {
                'reviewer_image': {
                    'url': "http://google.com"
                }
            }
        ]
    }
}

I have got:

<?xml version="1.0" encoding="utf-8"?>
<feed>
        <reviewer_images>
                <reviewer_image>
                        <url>http://google.com</url>
                </reviewer_image>
        </reviewer_images>
        <reviewer_images>
                <reviewer_image>
                        <url>http://github.com</url>
                </reviewer_image>
        </reviewer_images>
</feed>

Is it possible to get several reviewer_image inside identical reviewer_images tag?:

<?xml version="1.0" encoding="utf-8"?>
<feed>
        <reviewer_images>
                <reviewer_image>
                      <url>http://google.com</url>
                </reviewer_image>
                <reviewer_image>
                      <url>http://github.com</url>
                </reviewer_image>
        </reviewer_images>
</feed>
thaikoh commented 1 year ago

Having the same issue, any help will be appreciated.

bfontaine commented 1 year ago

A bit late to the party:

feed = {
    'feed': {
        'reviewer_images': {
            'reviewer_image': [
                {
                    'url': "http://google.com"
                },
                {
                    'url': "http://google.com"
                }
            ]
        }
    }
}
print(xmltodict.unparse(feed, pretty=True))

Result:

<?xml version="1.0" encoding="utf-8"?>
<feed>
    <reviewer_images>
        <reviewer_image>
            <url>http://google.com</url>
        </reviewer_image>
        <reviewer_image>
            <url>http://google.com</url>
        </reviewer_image>
    </reviewer_images>
</feed>

To generate multiple <foo> you have to use { "foo": […] } and not [ {"foo": …}, {"foo": …} ].