Skip to content

Commit

Permalink
Improve array convert in U.toXml(map).
Browse files Browse the repository at this point in the history
  • Loading branch information
javadev authored Sep 30, 2018
1 parent f16f494 commit fecfd8d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
21 changes: 18 additions & 3 deletions src/main/java/com/github/underscore/lodash/Xml.java
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,14 @@ private static void addText(final Map.Entry entry, final List<XmlStringBuilder>
private static void addElements(final XmlStringBuilder.Step identStep, final int ident, Map.Entry entry,
Set<String> namespaces, final List<XmlStringBuilder> elems, final boolean addNewLine) {
boolean parentTextFound = !elems.isEmpty() && elems.get(elems.size() - 1) instanceof XmlStringBuilderText;
XmlStringBuilder localBuilder = new XmlStringBuilderWithoutHeader(identStep, ident);
final XmlStringBuilder localBuilder;
if (String.valueOf(((List) entry.getValue()).get(0)).startsWith("{" + TEXT)
|| String.valueOf(((List) entry.getValue()).get(((List) entry.getValue()).size() - 1))
.startsWith("{" + TEXT)) {
localBuilder = new XmlStringBuilderText(identStep, ident);
} else {
localBuilder = new XmlStringBuilderWithoutHeader(identStep, ident);
}
XmlArray.writeXml((List) entry.getValue(), localBuilder,
String.valueOf(entry.getKey()), parentTextFound, namespaces);
if (addNewLine) {
Expand Down Expand Up @@ -683,9 +690,17 @@ public static String toXml(Map map, XmlStringBuilder.Step identStep) {
localMap = map;
}
if (localMap == null || localMap.size() != 1
|| ((String) ((Map.Entry) localMap.entrySet().iterator().next()).getKey()).startsWith("-")
|| (String.valueOf(((Map.Entry) localMap.entrySet().iterator().next()).getKey())).startsWith("-")
|| ((Map.Entry) localMap.entrySet().iterator().next()).getValue() instanceof List) {
XmlObject.writeXml(localMap, "root", builder, false, U.<String>newLinkedHashSet());
final String name;
if (localMap != null && localMap.size() == 1
&& ((Map.Entry) localMap.entrySet().iterator().next()).getValue() instanceof List
&& !((List) ((Map.Entry) localMap.entrySet().iterator().next()).getValue()).isEmpty()) {
name = String.valueOf(((Map.Entry) localMap.entrySet().iterator().next()).getKey());
} else {
name = "root";
}
XmlObject.writeXml(localMap, name, builder, false, U.<String>newLinkedHashSet());
} else {
XmlObject.writeXml(localMap, null, builder, false, U.<String>newLinkedHashSet());
}
Expand Down
24 changes: 24 additions & 0 deletions src/test/java/com/github/underscore/lodash/StringTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1941,6 +1941,30 @@ public void toXmlFromJson19() {
U.toXml((Map<String, Object>) U.fromJson(json2)));
}

@SuppressWarnings("unchecked")
@Test
public void toXmlFromJson20() {
final String json = "{\n"
+ " \"a\": [\n"
+ " {\"#text\": \"Hello \"},\n"
+ " {\"b\": \"World\"}\n"
+ " ]\n"
+ "}";
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<a>Hello <b>World</b></a>", U.toXml((Map<String, Object>) U.fromJson(json)));
final String json2 = "{\n"
+ " \"a\": [\n"
+ " {\"b\": \"World\"},\n"
+ " {\"#text1\": \".\"}\n"
+ " ]\n"
+ "}";
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<a> <b>World</b>.</a>", U.toXml((Map<String, Object>) U.fromJson(json2)));
final String json3 = "{\n \"a\": []\n}";
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<root>\n <a>\n </a>\n</root>", U.toXml((Map<String, Object>) U.fromJson(json3)));
}

@SuppressWarnings("unchecked")
@Test
public void toXml() {
Expand Down

0 comments on commit fecfd8d

Please sign in to comment.