From 7073bc8c47aa26fe97e3ad6d545f7c7d843cb3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gy=C3=B6rgy=20F=C3=B6ldv=C3=A1ri?= Date: Sun, 4 Feb 2018 18:43:35 +0100 Subject: [PATCH] XML toJSONObject(Readre reader) --- XML.java | 63 ++++++++++++++++++++++++++++++++++++++++++------- XMLTokener.java | 10 ++++++++ 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/XML.java b/XML.java index 08666f7..55362b2 100644 --- a/XML.java +++ b/XML.java @@ -24,6 +24,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +import java.io.Reader; +import java.io.StringReader; import java.util.Iterator; /** @@ -470,6 +472,56 @@ public class XML { return toJSONObject(string, false); } + /** + * Convert a well-formed (but not necessarily valid) XML 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 reader The XML source reader. + * @return A JSONObject containing the structured data from the XML string. + * @throws JSONException Thrown if there is an errors while parsing the string + */ + public static JSONObject toJSONObject(Reader reader) throws JSONException { + return toJSONObject(reader, false); + } + + /** + * Convert a well-formed (but not necessarily valid) XML 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. + * + * All values are converted as strings, for 1, 01, 29.0 will not be coerced to + * numbers but will instead be the exact value as seen in the XML document. + * + * @param reader The XML source reader. + * @param keepStrings If true, then values will not be coerced into boolean + * or numeric values and will instead be left as strings + * @return A JSONObject containing the structured data from the XML string. + * @throws JSONException Thrown if there is an errors while parsing the string + */ + public static JSONObject toJSONObject(Reader reader, boolean keepStrings) throws JSONException { + JSONObject jo = new JSONObject(); + XMLTokener x = new XMLTokener(reader); + while (x.more()) { + x.skipPast("<"); + if(x.more()) { + parse(x, jo, null, keepStrings); + } + } + return jo; + } /** * Convert a well-formed (but not necessarily valid) XML string into a @@ -493,16 +545,9 @@ public class XML { * @throws JSONException Thrown if there is an errors while parsing the string */ public static JSONObject toJSONObject(String string, boolean keepStrings) throws JSONException { - JSONObject jo = new JSONObject(); - XMLTokener x = new XMLTokener(string); - while (x.more()) { - x.skipPast("<"); - if(x.more()) { - parse(x, jo, null, keepStrings); - } - } - return jo; + return toJSONObject(new StringReader(string), keepStrings); } + /** * Convert a JSONObject into a well-formed, element-normal XML string. * diff --git a/XMLTokener.java b/XMLTokener.java index 1da8b84..50e3acc 100644 --- a/XMLTokener.java +++ b/XMLTokener.java @@ -24,6 +24,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +import java.io.Reader; + /** * The XMLTokener extends the JSONTokener to provide additional methods * for the parsing of XML texts. @@ -47,6 +49,14 @@ public class XMLTokener extends JSONTokener { entity.put("quot", XML.QUOT); } + /** + * Construct an XMLTokener from a Reader. + * @param r A source reader. + */ + public XMLTokener(Reader r) { + super(r); + } + /** * Construct an XMLTokener from a string. * @param s A source string.