How to parse XML without 3rd party library with Java? -


i trying build xml parser myself(actually gpx parser).

some questions popped head while writing code.

  • should store tags static variables? : there standard document gpx, , seems using limited kinds of tags, want build code more flexible.
  • how build tree structure, while reading file line line. have try use recursive search file explorer, case little bit harder.

some of code below.

public class gpxfileparser extends abstractfileparser {      private volatile file gpxfile;     boolean iscoredate = false;     private static final string xml_opener = "<";     private static final string xml_closer = "</";     private static final string xml_end = ">";     private static final string attr = "=";     private static final string space = " ";     map<string, object> mapdata;       public gpxfileparser() {         mapdata = new hashmap<string, object>();     }      public gpxfileparser(string filepath) {         gpxfile = new file(filepath);         if(gpxfile.exists() && gpxfile.isfile()){             if(!gpxfile.canexecute()) gpxfile.setexecutable(true);         }         mapdata = new hashmap<string, object>();     }      private string getxmlkey(string line) {         string temp = "";         if(line.contains(xml_opener)) {             temp = line.substring(1, line.indexof(xml_end));         }         return temp;     }      private string getxmlval(string key, string line) {         string temp = "";         if(line.contains(xml_closer)){             line = line.substring(line.indexof(xml_end) + 1);             temp = line.substring(0, line.indexof(xml_closer));         }         return temp;     }      private list<map<string, object>> getattributeifnotnull(string key) {         list<map<string, object>> ret = new arraylist<map<string,object>>();         string[] attributes = key.split(space);         if(attributes.length < 2) return ret;         for(int = 0; < attributes.length; i++) {             map<string, object> single = new hashmap<string, object>();             string singleattribute = attributes[i];             if(!singleattribute.contains(attr)) continue;             string attrkey = singleattribute.split(attr)[0];             string attrval = stringutils.removecolons(singleattribute.split(attr)[1]);             single.put(attrkey, attrval);             ret.add(single);         }         return ret;     }      @override     public map<string, object> parse(file param) throws exception {         if(gpxfile == null) gpxfile = new file(param.getabsolutepath());         bufferedreader br = new bufferedreader(new inputstreamreader(new fileinputstream(gpxfile)));         string singleline = "";         boolean hassub = false;          int dept = 0;         while((singleline =br.readline()) != null){             hashmap<string, object> single = null;             singleline = singleline.trim();             if(singleline.contains("<trk>")){iscoredate = true;             }else if(singleline.contains("</trk>")){iscoredate = false;}              if(iscoredate){                 if(singleline.startswith(xml_closer)) continue;                  int opencnt = stringutils.getsubstringcnt(singleline, xml_opener);                 int closecnt = stringutils.getsubstringcnt(singleline, xml_closer);                 if(opencnt == closecnt) hassub = false;                 else {                     if(opencnt > closecnt){                         hassub = true;                     }                 }                 single = new hashmap<string, object>();                 string key = getxmlkey(singleline);                 system.out.println("key >> " + key);                 list<map<string, object>> attrlist = getattributeifnotnull(key);                 if(attrlist.isempty()){                     string val = getxmlval(key, singleline);                     system.out.println("val >> " + val);                     single.put(key, val);                 }else{                     key = key.split(space)[0];                     single.put(key, attrlist);                 }                 if(!single.isempty()) mapdata.putall(single);             }         }         br.close();         return mapdata;     } }; 

i need recommendation of reference, not use 3rd party library or architect principles.

what expected tree type map, code returns 1 depth map.

{trkseg=, extensions=, gpxtpx:atemp=18.0, name=awesome riding, trkpt=[{lon=126.29451882094145}, {lat=33.443800024688244}], time=2015-05-01t21:55:10.000z, gpxtpx:trackpointextension=, gpxtpx:cad=49, trk=} 

thanks reviewing code , answers :d

p.s. original data is...

<?xml version="1.0" encoding="utf-8"?> <gpx version="1.1" creator="garmin connect"   xsi:schemalocation="http://www.topografix.com/gpx/1/1 http://www.topografix.com/gpx/1/1/gpx.xsd http://www.garmin.com/xmlschemas/gpxextensions/v3 http://www.garmin.com/xmlschemas/gpxextensionsv3.xsd http://www.garmin.com/xmlschemas/trackpointextension/v1 http://www.garmin.com/xmlschemas/trackpointextensionv1.xsd"   xmlns="http://www.topografix.com/gpx/1/1"   xmlns:gpxtpx="http://www.garmin.com/xmlschemas/trackpointextension/v1"   xmlns:gpxx="http://www.garmin.com/xmlschemas/gpxextensions/v3" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance">   <metadata>     <link href="connect.garmin.com">       <text>garmin connect</text>     </link>     <time>2015-05-01t21:51:42.000z</time>   </metadata>   <trk>     <name>awesome riding!</name>     <trkseg>       <trkpt lon="126.28584556281567" lat="33.4417990129441">         <time>2015-05-01t21:51:42.000z</time>       </trkpt>       <trkpt lon="126.28585444763303" lat="33.441797671839595">         <time>2015-05-01t21:51:43.000z</time>       </trkpt>       <trkpt lon="126.28589048981667" lat="33.441788451746106">         <time>2015-05-01t21:51:44.000z</time>       </trkpt>       <trkpt lon="126.28591739572585" lat="33.44177604652941">         <time>2015-05-01t21:51:45.000z</time>       </trkpt>       <trkpt lon="126.28594572655857" lat="33.44176380895078">         <time>2015-05-01t21:51:46.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28597606904805" lat="33.44175492413342">         <time>2015-05-01t21:51:47.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28600666299462" lat="33.441743860021234">         <time>2015-05-01t21:51:48.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>27</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28603314980865" lat="33.441728772595525">         <time>2015-05-01t21:51:49.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>0</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28606181591749" lat="33.44171678647399">         <time>2015-05-01t21:51:50.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>0</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28608050756156" lat="33.4416954126209">         <time>2015-05-01t21:51:51.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>0</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.2860903982073" lat="33.441674122586846">         <time>2015-05-01t21:51:52.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>0</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28609601408243" lat="33.44165383838117">         <time>2015-05-01t21:51:53.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>0</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.2860840279609" lat="33.441627100110054">         <time>2015-05-01t21:51:54.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>0</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.2860647495836" lat="33.44160404987633">         <time>2015-05-01t21:51:55.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>12</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28604924306273" lat="33.44158200547099">         <time>2015-05-01t21:51:56.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>24</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28602971322834" lat="33.441558703780174">         <time>2015-05-01t21:51:57.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>38</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.28601093776524" lat="33.441531378775835">         <time>2015-05-01t21:51:58.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>20.0</gpxtpx:atemp>             <gpxtpx:cad>39</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.29447498358786" lat="33.44377965666354">         <time>2015-05-01t21:55:09.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>18.0</gpxtpx:atemp>             <gpxtpx:cad>47</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>       <trkpt lon="126.29451882094145" lat="33.443800024688244">         <time>2015-05-01t21:55:10.000z</time>         <extensions>           <gpxtpx:trackpointextension>             <gpxtpx:atemp>18.0</gpxtpx:atemp>             <gpxtpx:cad>49</gpxtpx:cad>           </gpxtpx:trackpointextension>         </extensions>       </trkpt>     </trkseg>   </trk> </gpx> 


Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -