package rene.util.xml; import java.util.Enumeration; import java.util.Iterator; import java.util.Vector; import rene.util.list.ListElement; import rene.util.list.Tree; import rene.util.parser.StringParser; public class XmlTree extends Tree implements Enumeration<XmlTree>, Iterator<XmlTree>, Iterable<XmlTree> { public XmlTree (XmlTag t) { super(t); } public XmlTag getTag () { return (XmlTag)content(); } public XmlTree xmlFirstContent () { if (firstchild()!=null) return (XmlTree)firstchild(); else return null; } public boolean isText () { if (!haschildren()) return true; if (firstchild()!=lastchild()) return false; XmlTree t=(XmlTree)firstchild(); XmlTag tag=t.getTag(); if (!(tag instanceof XmlTagText)) return false; return true; } public String getText () { if (!haschildren()) return ""; XmlTree t=(XmlTree)firstchild(); XmlTag tag=t.getTag(); return ((XmlTagText)tag).getContent(); } ListElement Current; public Enumeration<XmlTree> getContent () { Current=children().first(); return this; } public boolean hasMoreElements () { return Current!=null; } public XmlTree nextElement () { if (Current==null) return null; XmlTree c=(XmlTree)(Current.content()); Current=Current.next(); return c; } public boolean isTag (String s) { return getTag().name().equals(s); } public String parseComment () throws XmlReaderException { StringBuffer s=new StringBuffer(); Enumeration e=getContent(); while (e.hasMoreElements()) { XmlTree tree=(XmlTree)e.nextElement(); XmlTag tag=tree.getTag(); if (tag.name().equals("P")) { if (!tree.haschildren()) s.append("\n"); else { XmlTree h=tree.xmlFirstContent(); String k=((XmlTagText)h.getTag()).getContent(); k=k.replace('\n',' '); StringParser p=new StringParser(k); Vector v=p.wraplines(1000); for (int i=0; i<v.size(); i++) { s.append((String)v.elementAt(i)); s.append("\n"); } } } else if (tag instanceof XmlTagText) { String k=((XmlTagText)tag).getContent(); StringParser p=new StringParser(k); Vector v=p.wraplines(1000); for (int i=0; i<v.size(); i++) { s.append((String)v.elementAt(i)); s.append("\n"); } } else throw new XmlReaderException("<"+tag.name()+"> not proper here."); } return s.toString(); } public boolean hasNext() { return Current!=null; } public XmlTree next() { if (Current==null) return null; XmlTree c=(XmlTree)(Current.content()); Current=Current.next(); return c; } public void remove() { } public Iterator iterator() { Current=children().first(); return this; } }