Description
If two parameters are used in XMLParser: transformTagName and allowBooleanAttributes, then a boolean attribute with the original tag name is added to tags that have been renamed and do not contain attributes.
In my example, it works like this: I rename list-item to li and get the following result: <list-item></list-item> -> <li list-item=""></li>. To rule out other factors, I tried renaming tags that contained attributes, including boolean attribute. I also tried using updateTag option instead of transformTagName`, and the problem did not recur.
I also came across an issue with a similar description, but it seems to have been abandoned and the author did not provide any details #523
Input
Code
const tagMap = { 'list-item': 'li' };
const xmlParser = new XMLParser({
preserveOrder: true,
allowBooleanAttributes: true,
ignoreAttributes: false,
transformTagName: (tagName) => tagMap[tagName] ?? tagName,
})
const jObj = xmlParser.parse(`<?xml version="1.0"?>
<root>
<ul>
<list-item>foo</list-item>
<list-item checked>bar</list-item>
<list-item attr="value">bar</list-item>
</ul>
</root>`)
console.log(JSON.stringify(jObj, null, 2));
Output
With preserveOrder
[
{
"?xml": [
{
"#text": ""
}
],
":@": {
"@_version": "1.0"
}
},
{
"root": [
{
"ul": [
{
"li": [
{
"#text": "foo"
}
],
":@": {
"@_list-item": true
}
},
{
"li": [
{
"#text": "bar"
}
],
":@": {
"@_checked": true
}
},
{
"li": [
{
"#text": "bar"
}
],
":@": {
"@_attr": "value"
}
}
]
}
]
}
]
Without preserveOrder
{
"root": {
"ul": {
"li": [
{
"#text": "foo",
"@_list-item": true
},
{
"#text": "bar",
"@_checked": true
},
{
"#text": "bar",
"@_attr": "value"
}
],
"#text": "\n \n \n \n"
}
}
}
expected data
With preserveOrder
[
{
"?xml": [
{
"#text": ""
}
],
":@": {
"@_version": "1.0"
}
},
{
"root": [
{
"ul": [
{
"li": [
{
"#text": "foo"
}
],
},
{
"li": [
{
"#text": "bar"
}
],
":@": {
"@_checked": true
}
},
{
"li": [
{
"#text": "bar"
}
],
":@": {
"@_attr": "value"
}
}
]
}
]
}
]
Without preserveOrder
{
"root": {
"ul": {
"li": [
{
"#text": "foo"
},
{
"#text": "bar",
"@_checked": true
},
{
"#text": "bar",
"@_attr": "value"
}
],
"#text": "\n \n \n \n"
}
}
}
Would you like to work on this issue?
Bookmark this repository for further updates. Visit SoloThought to know about recent features.
Description
If two parameters are used in XMLParser:
transformTagNameandallowBooleanAttributes, then a boolean attribute with the original tag name is added to tags that have been renamed and do not contain attributes.In my example, it works like this: I rename
list-itemtoliand get the following result:<list-item></list-item>-><li list-item=""></li>. To rule out other factors, I tried renaming tags that contained attributes, including boolean attribute. I also tried usingupdateTagoption instead of transformTagName`, and the problem did not recur.I also came across an issue with a similar description, but it seems to have been abandoned and the author did not provide any details #523
Input
Code
Output
With preserveOrder
[ { "?xml": [ { "#text": "" } ], ":@": { "@_version": "1.0" } }, { "root": [ { "ul": [ { "li": [ { "#text": "foo" } ], ":@": { "@_list-item": true } }, { "li": [ { "#text": "bar" } ], ":@": { "@_checked": true } }, { "li": [ { "#text": "bar" } ], ":@": { "@_attr": "value" } } ] } ] } ]Without preserveOrder
{ "root": { "ul": { "li": [ { "#text": "foo", "@_list-item": true }, { "#text": "bar", "@_checked": true }, { "#text": "bar", "@_attr": "value" } ], "#text": "\n \n \n \n" } } }expected data
With preserveOrder
[ { "?xml": [ { "#text": "" } ], ":@": { "@_version": "1.0" } }, { "root": [ { "ul": [ { "li": [ { "#text": "foo" } ], }, { "li": [ { "#text": "bar" } ], ":@": { "@_checked": true } }, { "li": [ { "#text": "bar" } ], ":@": { "@_attr": "value" } } ] } ] } ]Without preserveOrder
{ "root": { "ul": { "li": [ { "#text": "foo" }, { "#text": "bar", "@_checked": true }, { "#text": "bar", "@_attr": "value" } ], "#text": "\n \n \n \n" } } }Would you like to work on this issue?
Bookmark this repository for further updates. Visit SoloThought to know about recent features.