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