Skip to content

Commit

Permalink
fix: get oneListGroup to work as expected for array of strings (#662)
Browse files Browse the repository at this point in the history
If I have `oneListGroup` enabled I would expect that:

```json
{
  a: ['(first)', 'second']
}
```

Would give me:
```xml
<a>(first)(second)</a>
```

But I get:
```xml
<a>
  <a>(first)</a>
  <a>(second)</a>
</a>
```

This commit fixes that issue.

Co-authored-by: Andreas Naziris <[email protected]>
  • Loading branch information
a-rasin and Andreas Naziris authored Jul 7, 2024
1 parent b8e40c8 commit 931e910
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
15 changes: 14 additions & 1 deletion spec/j2x_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,20 @@ describe("XMLBuilder", function() {
const expected = `<a><b>1</b><b>2</b></a>`;
expect(result).toEqual(expected);
});


it("should correctly handle values with oneListGroup", function() {
const jObj = {
"a": [
"(first)",
"(second)"
],
};
const builder = new XMLBuilder({oneListGroup:"true", attributesGroupName: "@"});
const result = builder.build(jObj);
const expected = `<a>(first)(second)</a>`;
expect(result).toEqual(expected);
});

it('should build tag with only text node', async () => {
const schema_obj = {
field: {
Expand Down
8 changes: 7 additions & 1 deletion src/xmlbuilder/json2xml.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,13 @@ Builder.prototype.j2x = function(jObj, level) {
listTagVal += this.processTextOrObjNode(item, key, level)
}
} else {
listTagVal += this.buildTextValNode(item, key, '', level);
if (this.options.oneListGroup) {
let textValue = this.options.tagValueProcessor(key, item);
textValue = this.replaceEntitiesValue(textValue);
listTagVal += textValue;
} else {
listTagVal += this.buildTextValNode(item, key, '', level);
}
}
}
if(this.options.oneListGroup){
Expand Down

0 comments on commit 931e910

Please sign in to comment.