comparison src/luan/modules/parsers/Xml2.java @ 1791:f8f5c51f5b36

xml work
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 26 Dec 2023 19:16:18 -0700
parents
children
comparison
equal deleted inserted replaced
1790:a8c685a894b4 1791:f8f5c51f5b36
1 package luan.modules.parsers;
2
3 import java.util.Map;
4 import java.util.LinkedHashMap;
5 import goodjava.parser.ParseException;
6 import goodjava.xml.XmlParser;
7 import goodjava.xml.Xml;
8 import goodjava.xml.XmlElement;
9 import luan.LuanTable;
10 import luan.LuanException;
11
12
13 public final class Xml2 {
14
15 public static LuanTable parse(String s) throws ParseException, LuanException {
16 Xml xml = XmlParser.parse(s);
17 LuanTable tbl = new LuanTable();
18 tbl.rawPut( "declaration", xml.declaration );
19 tbl.rawPut( "element", newElement(xml.getElement()) );
20 return tbl;
21 }
22
23 private static LuanTable newElement(XmlElement element) throws LuanException {
24 LuanTable tbl = new LuanTable();
25 tbl.rawPut( "name", element.name );
26 LuanTable attrs = new LuanTable();
27 for( Map.Entry<String,String> entry : element.attributes.entrySet() ) {
28 attrs.rawPut(entry.getKey(),entry.getValue());
29 }
30 tbl.rawPut( "attributes", attrs );
31 Object content = element.getContent();
32 if( content == null ) {
33 // nothing
34 } else if( content instanceof String ) {
35 tbl.rawPut( "content", content );
36 } else {
37 XmlElement[] elements = (XmlElement[])content;
38 LuanTable t = new LuanTable();
39 for( XmlElement el : elements ) {
40 LuanTable elTbl = newElement(el);
41 elTbl.rawPut( "parent", tbl );
42 t.rawAdd(elTbl);
43 }
44 tbl.rawPut( "content", t );
45 }
46 return tbl;
47 }
48
49
50 public static String toString(LuanTable tbl) {
51 Xml xml = new Xml();
52 xml.declaration = (String)tbl.rawGet("declaration");
53 xml.setElement( element( (LuanTable)tbl.rawGet("element") ) );
54 return xml.toString();
55 }
56
57 private static XmlElement element(LuanTable tbl) {
58 String name = (String)tbl.rawGet("name");
59 Map<String,String> map = new LinkedHashMap<String,String>();
60 {
61 LuanTable t = (LuanTable)tbl.rawGet("attributes");
62 for( Map.Entry entry : t.rawIterable() ) {
63 String key =(String)entry.getKey();
64 String value =(String)entry.getValue();
65 map.put(key,value);
66 }
67 }
68 XmlElement element = new XmlElement(name,map);
69 Object content = tbl.rawGet("content");
70 if( content == null ) {
71 // nothing
72 } else if( content instanceof String ) {
73 element.setContent((String)content);
74 } else if( content instanceof LuanTable ) {
75 LuanTable t = (LuanTable)content;
76 int n = t.rawLength();
77 XmlElement[] a = new XmlElement[n];
78 for( int i=0; i<n; i++ ) {
79 LuanTable elTbl = (LuanTable)t.rawGet(Integer.valueOf(i+1));
80 a[i] = element(elTbl);
81 }
82 element.setContent(a);
83 }
84 return element;
85 }
86 }