diff --git a/XML.java b/XML.java index bad8737..dee7544 100755 --- a/XML.java +++ b/XML.java @@ -27,49 +27,54 @@ SOFTWARE. import java.util.Iterator; /** - * This provides static methods to convert an XML text into a JSONObject, - * and to covert a JSONObject into an XML text. + * This provides static methods to convert an XML text into a JSONObject, and to + * covert a JSONObject into an XML text. + * * @author JSON.org * @version 2015-10-18 */ +@SuppressWarnings("boxing") public class XML { /** The Character '&'. */ - public static final Character AMP = '&'; + public static final Character AMP = '&'; /** The Character '''. */ - public static final Character APOS = '\''; + public static final Character APOS = '\''; /** The Character '!'. */ - public static final Character BANG = '!'; + public static final Character BANG = '!'; /** The Character '='. */ - public static final Character EQ = '='; + public static final Character EQ = '='; /** The Character '>'. */ - public static final Character GT = '>'; + public static final Character GT = '>'; /** The Character '<'. */ - public static final Character LT = '<'; + public static final Character LT = '<'; /** The Character '?'. */ public static final Character QUEST = '?'; /** The Character '"'. */ - public static final Character QUOT = '"'; + public static final Character QUOT = '"'; /** The Character '/'. */ public static final Character SLASH = '/'; /** * Replace special characters with XML escapes: + * *
* & (ampersand) is replaced by & * < (less than) is replaced by < * > (greater than) is replaced by > * " (double quote) is replaced by " *- * @param string The string to be escaped. + * + * @param string + * The string to be escaped. * @return The escaped string. */ public static String escape(String string) { @@ -100,9 +105,11 @@ public class XML { } /** - * Throw an exception if the string contains whitespace. - * Whitespace is not allowed in tagNames and attributes. - * @param string A string. + * Throw an exception if the string contains whitespace. Whitespace is not + * allowed in tagNames and attributes. + * + * @param string + * A string. * @throws JSONException */ public static void noSpace(String string) throws JSONException { @@ -112,42 +119,46 @@ public class XML { } for (i = 0; i < length; i += 1) { if (Character.isWhitespace(string.charAt(i))) { - throw new JSONException("'" + string + - "' contains a space character."); + throw new JSONException("'" + string + + "' contains a space character."); } } } /** * Scan the content following the named tag, attaching it to the context. - * @param x The XMLTokener containing the source string. - * @param context The JSONObject that will include the new material. - * @param name The tag name. + * + * @param x + * The XMLTokener containing the source string. + * @param context + * The JSONObject that will include the new material. + * @param name + * The tag name. * @return true if the close tag is processed. * @throws JSONException */ - private static boolean parse(XMLTokener x, JSONObject context, - String name) throws JSONException { - char c; - int i; + private static boolean parse(XMLTokener x, JSONObject context, String name) + throws JSONException { + char c; + int i; JSONObject jsonobject = null; - String string; - String tagName; - Object token; + String string; + String tagName; + Object token; -// Test for and skip past these forms: -// -// -// -// ... ?> -// Report errors for these forms: -// <> -// <= -// << + // Test for and skip past these forms: + // + // + // + // ... ?> + // Report errors for these forms: + // <> + // <= + // << token = x.nextToken(); -// "); return false; } else if (token == SLASH) { -// Close tag + // Close tag token = x.nextToken(); if (name == null) { @@ -207,10 +217,10 @@ public class XML { } else if (token instanceof Character) { throw x.syntaxError("Misshaped tag"); -// Open tag < + // Open tag < } else { - tagName = (String)token; + tagName = (String) token; token = null; jsonobject = new JSONObject(); for (;;) { @@ -218,10 +228,9 @@ public class XML { token = x.nextToken(); } -// attribute = value - + // attribute = value if (token instanceof String) { - string = (String)token; + string = (String) token; token = x.nextToken(); if (token == EQ) { token = x.nextToken(); @@ -229,15 +238,15 @@ public class XML { throw x.syntaxError("Missing value"); } jsonobject.accumulate(string, - XML.stringToValue((String)token)); + XML.stringToValue((String) token)); token = null; } else { jsonobject.accumulate(string, ""); } -// Empty tag <.../> } else if (token == SLASH) { + // Empty tag <.../> if (x.nextToken() != GT) { throw x.syntaxError("Misshaped tag"); } @@ -248,9 +257,8 @@ public class XML { } return false; -// Content, between <...> and - } else if (token == GT) { + // Content, between <...> and for (;;) { token = x.nextContent(); if (token == null) { @@ -259,20 +267,19 @@ public class XML { } return false; } else if (token instanceof String) { - string = (String)token; + string = (String) token; if (string.length() > 0) { jsonobject.accumulate("content", XML.stringToValue(string)); } -// Nested element - } else if (token == LT) { + // Nested element if (parse(x, jsonobject, tagName)) { if (jsonobject.length() == 0) { context.accumulate(tagName, ""); - } else if (jsonobject.length() == 1 && - jsonobject.opt("content") != null) { + } else if (jsonobject.length() == 1 + && jsonobject.opt("content") != null) { context.accumulate(tagName, jsonobject.opt("content")); } else { @@ -289,14 +296,15 @@ public class XML { } } - /** * Try to convert a string into a number, boolean, or null. If the string * can't be converted, return the string. This is much less ambitious than * JSONObject.stringToValue, especially because it does not attempt to * convert plus forms, octal forms, hex forms, or E forms lacking decimal * points. - * @param string A String. + * + * @param string + * A String. * @return A simple JSON value. */ public static Object stringToValue(String string) { @@ -310,9 +318,8 @@ public class XML { return JSONObject.NULL; } -// If it might be a number, try converting it, first as a Long, and then as a -// Double. If that doesn't work, return the string. - + // If it might be a number, try converting it, first as a Long, and then + // as a Double. If that doesn't work, return the string. try { char initial = string.charAt(0); if (initial == '-' || (initial >= '0' && initial <= '9')) { @@ -321,30 +328,31 @@ public class XML { return value; } } - } catch (Exception ignore) { + } catch (Exception ignore) { try { Double value = new Double(string); if (value.toString().equals(string)) { return value; } - } catch (Exception ignoreAlso) { + } catch (Exception ignoreAlso) { } } return string; } - /** * Convert a well-formed (but not necessarily valid) XML string into a - * JSONObject. Some information may be lost in this transformation - * because JSON is a data format and XML is a document format. XML uses - * elements, attributes, and content text, while JSON uses unordered - * collections of name/value pairs and arrays of values. JSON does not - * does not like to distinguish between elements and attributes. - * Sequences of similar elements are represented as JSONArrays. Content - * text may be placed in a "content" member. Comments, prologs, DTDs, and - *
<[ [ ]]>
are ignored.
- * @param string The source string.
+ * JSONObject. Some information may be lost in this transformation because
+ * JSON is a data format and XML is a document format. XML uses elements,
+ * attributes, and content text, while JSON uses unordered collections of
+ * name/value pairs and arrays of values. JSON does not does not like to
+ * distinguish between elements and attributes. Sequences of similar
+ * elements are represented as JSONArrays. Content text may be placed in a
+ * "content" member. Comments, prologs, DTDs, and <[ [ ]]>
+ * are ignored.
+ *
+ * @param string
+ * The source string.
* @return A JSONObject containing the structured data from the XML string.
* @throws JSONException
*/
@@ -357,65 +365,64 @@ public class XML {
return jo;
}
-
/**
* Convert a JSONObject into a well-formed, element-normal XML string.
- * @param object A JSONObject.
- * @return A string.
- * @throws JSONException
+ *
+ * @param object
+ * A JSONObject.
+ * @return A string.
+ * @throws JSONException
*/
public static String toString(Object object) throws JSONException {
return toString(object, null);
}
-
/**
* Convert a JSONObject into a well-formed, element-normal XML string.
- * @param object A JSONObject.
- * @param tagName The optional name of the enclosing tag.
+ *
+ * @param object
+ * A JSONObject.
+ * @param tagName
+ * The optional name of the enclosing tag.
* @return A string.
* @throws JSONException
*/
public static String toString(Object object, String tagName)
throws JSONException {
- StringBuilder sb = new StringBuilder();
- JSONArray ja;
- JSONObject jo;
- String key;
- Iterator