Mercurial Hosting > luan
view src/luan/modules/parsers/Xml2.java @ 1802:ca98dee04e08 default tip
add Parsers.json_null
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 21 Apr 2024 21:25:15 -0600 |
parents | f8f5c51f5b36 |
children |
line wrap: on
line source
package luan.modules.parsers; import java.util.Map; import java.util.LinkedHashMap; import goodjava.parser.ParseException; import goodjava.xml.XmlParser; import goodjava.xml.Xml; import goodjava.xml.XmlElement; import luan.LuanTable; import luan.LuanException; public final class Xml2 { public static LuanTable parse(String s) throws ParseException, LuanException { Xml xml = XmlParser.parse(s); LuanTable tbl = new LuanTable(); tbl.rawPut( "declaration", xml.declaration ); tbl.rawPut( "element", newElement(xml.getElement()) ); return tbl; } private static LuanTable newElement(XmlElement element) throws LuanException { LuanTable tbl = new LuanTable(); tbl.rawPut( "name", element.name ); LuanTable attrs = new LuanTable(); for( Map.Entry<String,String> entry : element.attributes.entrySet() ) { attrs.rawPut(entry.getKey(),entry.getValue()); } tbl.rawPut( "attributes", attrs ); Object content = element.getContent(); if( content == null ) { // nothing } else if( content instanceof String ) { tbl.rawPut( "content", content ); } else { XmlElement[] elements = (XmlElement[])content; LuanTable t = new LuanTable(); for( XmlElement el : elements ) { LuanTable elTbl = newElement(el); elTbl.rawPut( "parent", tbl ); t.rawAdd(elTbl); } tbl.rawPut( "content", t ); } return tbl; } public static String toString(LuanTable tbl) { Xml xml = new Xml(); xml.declaration = (String)tbl.rawGet("declaration"); xml.setElement( element( (LuanTable)tbl.rawGet("element") ) ); return xml.toString(); } private static XmlElement element(LuanTable tbl) { String name = (String)tbl.rawGet("name"); Map<String,String> map = new LinkedHashMap<String,String>(); { LuanTable t = (LuanTable)tbl.rawGet("attributes"); for( Map.Entry entry : t.rawIterable() ) { String key =(String)entry.getKey(); String value =(String)entry.getValue(); map.put(key,value); } } XmlElement element = new XmlElement(name,map); Object content = tbl.rawGet("content"); if( content == null ) { // nothing } else if( content instanceof String ) { element.setContent((String)content); } else if( content instanceof LuanTable ) { LuanTable t = (LuanTable)content; int n = t.rawLength(); XmlElement[] a = new XmlElement[n]; for( int i=0; i<n; i++ ) { LuanTable elTbl = (LuanTable)t.rawGet(Integer.valueOf(i+1)); a[i] = element(elTbl); } element.setContent(a); } return element; } }