Skip to content

Commit 422411d

Browse files
committed
Add comments support in U.toXml(map).
1 parent 4a53ab8 commit 422411d

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/main/java/com/github/underscore/lodash/U.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,6 +2074,8 @@ public static void writeXml(Map map, String name, XmlStringBuilder builder, bool
20742074
value = (String) entry.getValue();
20752075
}
20762076
elems.add(new XmlStringBuilderWithoutHeader(ident).append(escape(value)));
2077+
} else if ("#comment".equals(escape(String.valueOf(entry.getKey())))) {
2078+
addComment(entry, ident, index, entries, elems);
20772079
} else if (entry.getValue() instanceof List && !((List) entry.getValue()).isEmpty()) {
20782080
XmlStringBuilder localBuilder = new XmlStringBuilderWithoutHeader(ident);
20792081
XmlArray.writeXml((List) entry.getValue(), localBuilder,
@@ -2114,6 +2116,27 @@ public static void writeXml(Map map, String name, XmlStringBuilder builder, bool
21142116
builder.append("</").append(name).append(">");
21152117
}
21162118
}
2119+
2120+
private static void addComment(Map.Entry entry, int ident, int index, List<Map.Entry> entries,
2121+
List<XmlStringBuilder> elems) {
2122+
if (entry.getValue() instanceof List) {
2123+
for (Iterator iterator = ((List) entry.getValue()).iterator(); iterator.hasNext(); ) {
2124+
XmlStringBuilder localBuilder = new XmlStringBuilderWithoutHeader(ident)
2125+
.fillSpaces().append("<!--").append((String) iterator.next()).append("-->");
2126+
if (iterator.hasNext() || index < entries.size() - 1) {
2127+
localBuilder.newLine();
2128+
}
2129+
elems.add(localBuilder);
2130+
}
2131+
} else {
2132+
XmlStringBuilder localBuilder = new XmlStringBuilderWithoutHeader(ident)
2133+
.fillSpaces().append("<!--").append((String) entry.getValue()).append("-->");
2134+
if (index < entries.size() - 1) {
2135+
localBuilder.newLine();
2136+
}
2137+
elems.add(localBuilder);
2138+
}
2139+
}
21172140
}
21182141

21192142
public static class XmlValue {

src/test/java/com/github/underscore/lodash/StringTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,6 +1598,34 @@ public void toXmlFromJson7() {
15981598
U.toXml((Map<String, Object>) U.fromJson(json)));
15991599
}
16001600

1601+
@SuppressWarnings("unchecked")
1602+
@Test
1603+
public void toXmlFromJson8() {
1604+
final String json = "{\n \"element\": {\n \"#comment\": \" comment &&\"\n }\n}";
1605+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1606+
+ "<element>\n <!-- comment &&-->\n</element>",
1607+
U.toXml((Map<String, Object>) U.fromJson(json)));
1608+
final String json2 = "{\n \"element\": {\n \"#comment\": \" comment \",\n \"id\": \"1\"\n }\n}";
1609+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1610+
+ "<element>\n <!-- comment -->\n <id>1</id>\n</element>",
1611+
U.toXml((Map<String, Object>) U.fromJson(json2)));
1612+
}
1613+
1614+
@SuppressWarnings("unchecked")
1615+
@Test
1616+
public void toXmlFromJson9() {
1617+
final String json = "{\n \"element\": {\n \"#comment\": [\n \" comment1 \",\n"
1618+
+ " \" comment2 \"\n ]\n }\n}";
1619+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1620+
+ "<element>\n <!-- comment1 -->\n <!-- comment2 -->\n</element>",
1621+
U.toXml((Map<String, Object>) U.fromJson(json)));
1622+
final String json2 = "{\n \"element\": {\n \"#comment\": [\n \" comment1 \",\n"
1623+
+ " \" comment2 \"\n ]\n, \"id\": \"1\"\n }\n}";
1624+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1625+
+ "<element>\n <!-- comment1 -->\n <!-- comment2 -->\n <id>1</id>\n</element>",
1626+
U.toXml((Map<String, Object>) U.fromJson(json2)));
1627+
}
1628+
16011629
@SuppressWarnings("unchecked")
16021630
@Test
16031631
public void toXml() {

0 commit comments

Comments
 (0)