X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fxt%2FNode.java;h=b4c6026804e2afa145da24b947ff687f1f476645;hb=994545b936bd65563d41f5eea8bb494ffd3779e4;hp=60f97c1ec0f51ca2c3f95e72c8cb991e047bab14;hpb=1db99552ca93981bac63573aabd9ccf3a528c254;p=org.ibex.xt.git diff --git a/src/org/ibex/xt/Node.java b/src/org/ibex/xt/Node.java index 60f97c1..b4c6026 100644 --- a/src/org/ibex/xt/Node.java +++ b/src/org/ibex/xt/Node.java @@ -17,7 +17,7 @@ public class Node { public int numattrs = 0; public String[] attrs = null; public String uri = null; - private int delta = 0; + private int delta = 0; public Node() { } public Node(Node n) { copyFrom(n); } @@ -109,34 +109,54 @@ public class Node { } } + public static class Join extends Node.Stream { + final Node.Stream s1, s2; + boolean s1Done = false; + public Join(Node.Stream s1, Node.Stream s2) { this.s1=s1; this.s2=s2; } + protected boolean _read(Node n) { + if (!s1Done) return s2._read(n); + boolean ret = s1._read(n); + if (ret) return true; + s1Done = true; + return s2._read(n); + } + } + public static class FromXML extends Node.Stream { - private final XML.Pull xml; - private XML.Element parent = null; - private XML.Element e; + private final XML.Stream xml; + private XML.Elem parent = null; + private XML.Elem e; private int currentdelta = 0; - public FromXML(Reader r) { this.xml = new XML.Pull(r); } + public FromXML(Reader r) { this.xml = new XML.Stream(r); } protected boolean _read(Node n) { try { - Object ret = xml.read(); + Object ret = xml.next(); if (ret == null) return false; - if (ret instanceof String) { - n.cdata = (String)ret; - n.delta = xml.level - currentdelta; - currentdelta = xml.level; + if (ret instanceof XML.Text) { + n.cdata = ((XML.Text)ret).t; + n.delta = xml.getDepth() - currentdelta; + currentdelta = xml.getDepth(); return true; } - XML.Element e = (XML.Element)ret; + XML.Elem e = (XML.Elem)ret; n.name = e.getLocalName(); n.uri = e.getUri(); - n.numattrs = e.getAttrLen(); - n.delta = e.level - currentdelta; - currentdelta = e.level; + n.numattrs = e.getAttributes().attrSize(); + n.delta = xml.getDepth() - currentdelta; + currentdelta = xml.getDepth(); if (n.attrs == null || n.attrs.length < n.numattrs*2) n.attrs = new String[n.numattrs*4]; - for(int i=0; i"); } else { w.write(">"); - while(n != null && n.delta > 0) n = toXML(w, n); + while(n != null && n.delta > 0) { n = toXML(w, n); } w.write("");