diff --git a/src/main/java/com/github/underscore/U.java b/src/main/java/com/github/underscore/U.java index 6a4d09b9..c338e237 100644 --- a/src/main/java/com/github/underscore/U.java +++ b/src/main/java/com/github/underscore/U.java @@ -95,6 +95,7 @@ public class U extends Underscore { private static final String SELF_CLOSING = "-self-closing"; private static final String NIL_KEY = "-nil"; private static final String OMIT_XML_DECL = "#omit-xml-declaration"; + private static final String YES = "yes"; private static final java.util.regex.Pattern RE_WORDS = java.util.regex.Pattern.compile( UPPER @@ -2701,6 +2702,20 @@ public static String jsonToXml(String json) { return jsonToXml(json, Xml.XmlStringBuilder.Step.TWO_SPACES, null, null); } + @SuppressWarnings("unchecked") + public static String jsonToXmlMinimum(String json, Xml.XmlStringBuilder.Step identStep) { + Object object = Json.fromJson(json); + if (object instanceof Map) { + ((Map) object).put(OMIT_XML_DECL, YES); + return Xml.toXml(replaceNumberAndBooleanWithString((Map) object), identStep); + } + return Xml.toXmlWithoutRoot((List) object, identStep); + } + + public static String jsonToXmlMinimum(String json) { + return jsonToXmlMinimum(json, Xml.XmlStringBuilder.Step.TWO_SPACES); + } + @SuppressWarnings("unchecked") public static String xmlToJson( String xml, Json.JsonStringBuilder.Step identStep, XmlToJsonMode mode) { diff --git a/src/main/java/com/github/underscore/Xml.java b/src/main/java/com/github/underscore/Xml.java index a24d5eb7..122f5d4b 100644 --- a/src/main/java/com/github/underscore/Xml.java +++ b/src/main/java/com/github/underscore/Xml.java @@ -1118,6 +1118,12 @@ public static String toXml(Collection collection, XmlStringBuilder.Step identSte return builder.toString(); } + public static String toXmlWithoutRoot(Collection collection, XmlStringBuilder.Step identStep) { + final XmlStringBuilder builder = new XmlStringBuilderWithoutHeader(identStep, 0); + writeArray(collection, builder, ARRAY_TRUE); + return builder.toString(); + } + public static String toXml(Collection collection) { return toXml(collection, XmlStringBuilder.Step.TWO_SPACES); } diff --git a/src/test/java/com/github/underscore/LodashTest.java b/src/test/java/com/github/underscore/LodashTest.java index d53b82b6..21085f41 100644 --- a/src/test/java/com/github/underscore/LodashTest.java +++ b/src/test/java/com/github/underscore/LodashTest.java @@ -1343,6 +1343,25 @@ void jsonToXml() { U.jsonToXml("{\"a\" : {\n \"b\" : \"v1\" }, \"c\" : [\"v1\", \"v2\", \"v3\"]}")); } + @Test + void jsonToXmlMinimum() { + assertEquals("", + U.jsonToXmlMinimum("{\n \"a\": {\n }\n}")); + assertEquals("", + U.jsonToXmlMinimum("{\n \"a\": {\n }\n}", Xml.XmlStringBuilder.Step.TWO_SPACES)); + assertEquals("", + U.jsonToXmlMinimum("[]")); + assertEquals("\n" + + " \n" + + " 1\n" + + " \n" + + " v1\n" + + " v2\n" + + " v3\n" + + "", + U.jsonToXmlMinimum("{\"a\" : {\n \"b\" : 1 }, \"c\" : [\"v1\", \"v2\", \"v3\"]}")); + } + @Test void getTextType() { assertEquals(