Skip to content

Commit f83c99d

Browse files
committed
Add support for CDATA section in toXml(map).
1 parent 422411d commit f83c99d

File tree

2 files changed

+38
-21
lines changed

2 files changed

+38
-21
lines changed

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2075,7 +2075,9 @@ public static void writeXml(Map map, String name, XmlStringBuilder builder, bool
20752075
}
20762076
elems.add(new XmlStringBuilderWithoutHeader(ident).append(escape(value)));
20772077
} else if ("#comment".equals(escape(String.valueOf(entry.getKey())))) {
2078-
addComment(entry, ident, index, entries, elems);
2078+
addComment(entry, ident, index < entries.size() - 1, elems, "<!--", "-->");
2079+
} else if ("#cdata-section".equals(escape(String.valueOf(entry.getKey())))) {
2080+
addComment(entry, ident, index < entries.size() - 1, elems, "<![CDATA[", "]]>");
20792081
} else if (entry.getValue() instanceof List && !((List) entry.getValue()).isEmpty()) {
20802082
XmlStringBuilder localBuilder = new XmlStringBuilderWithoutHeader(ident);
20812083
XmlArray.writeXml((List) entry.getValue(), localBuilder,
@@ -2117,25 +2119,27 @@ public static void writeXml(Map map, String name, XmlStringBuilder builder, bool
21172119
}
21182120
}
21192121

2120-
private static void addComment(Map.Entry entry, int ident, int index, List<Map.Entry> entries,
2121-
List<XmlStringBuilder> elems) {
2122+
private static void addComment(Map.Entry entry, int ident, boolean addNewLine,
2123+
List<XmlStringBuilder> elems, String openElement, String closeElement) {
21222124
if (entry.getValue() instanceof List) {
21232125
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);
2126+
addCommentValue(ident, (String) iterator.next(),
2127+
iterator.hasNext() || addNewLine, elems, openElement, closeElement);
21302128
}
21312129
} 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);
2130+
addCommentValue(ident, (String) entry.getValue(), addNewLine, elems,
2131+
openElement, closeElement);
2132+
}
2133+
}
2134+
2135+
private static void addCommentValue(int ident, String value, boolean addNewLine,
2136+
List<XmlStringBuilder> elems, String openElement, String closeElement) {
2137+
XmlStringBuilder localBuilder = new XmlStringBuilderWithoutHeader(ident)
2138+
.fillSpaces().append(openElement).append(value).append(closeElement);
2139+
if (addNewLine) {
2140+
localBuilder.newLine();
21382141
}
2142+
elems.add(localBuilder);
21392143
}
21402144
}
21412145

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

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,15 +1614,28 @@ public void toXmlFromJson8() {
16141614
@SuppressWarnings("unchecked")
16151615
@Test
16161616
public void toXmlFromJson9() {
1617-
final String json = "{\n \"element\": {\n \"#comment\": [\n \" comment1 \",\n"
1618-
+ " \" comment2 \"\n ]\n }\n}";
1617+
final String json = "{\n \"element\": {\n \"#cdata-section\": [\n \" 1 \",\n"
1618+
+ " \" 2 \"\n ]\n }\n}";
16191619
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1620-
+ "<element>\n <!-- comment1 -->\n <!-- comment2 -->\n</element>",
1620+
+ "<element>\n <![CDATA[ 1 ]]>\n <![CDATA[ 2 ]]>\n</element>",
16211621
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}";
1622+
final String json2 = "{\n \"element\": {\n \"#cdata-section\": [\n \" 1 \",\n"
1623+
+ " \" 2 \"\n ]\n, \"id\": \"1\"\n }\n}";
16241624
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1625-
+ "<element>\n <!-- comment1 -->\n <!-- comment2 -->\n <id>1</id>\n</element>",
1625+
+ "<element>\n <![CDATA[ 1 ]]>\n <![CDATA[ 2 ]]>\n <id>1</id>\n</element>",
1626+
U.toXml((Map<String, Object>) U.fromJson(json2)));
1627+
}
1628+
1629+
@SuppressWarnings("unchecked")
1630+
@Test
1631+
public void toXmlFromJson10() {
1632+
final String json = "{\n \"element\": {\n \"#cdata-section\": \"&&\"\n }\n}";
1633+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1634+
+ "<element>\n <![CDATA[&&]]>\n</element>",
1635+
U.toXml((Map<String, Object>) U.fromJson(json)));
1636+
final String json2 = "{\n \"element\": {\n \"#cdata-section\": \"&&\"\n,\n \"id\": \"1\"\n }\n}";
1637+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1638+
+ "<element>\n <![CDATA[&&]]>\n <id>1</id>\n</element>",
16261639
U.toXml((Map<String, Object>) U.fromJson(json2)));
16271640
}
16281641

0 commit comments

Comments
 (0)