Back to index

wims  3.65+svn20090927
XmlTree.java
Go to the documentation of this file.
00001 package rene.util.xml;
00002 
00003 import java.util.Enumeration;
00004 import java.util.Vector;
00005 
00006 import rene.util.list.ListElement;
00007 import rene.util.list.Tree;
00008 import rene.util.parser.StringParser;
00009 
00010 public class XmlTree extends Tree
00011        implements Enumeration
00012 {      public XmlTree (XmlTag t)
00013        {      super(t);
00014        }
00015        public XmlTag getTag ()
00016        {      return (XmlTag)content();
00017        }
00018        public XmlTree xmlFirstContent ()
00019        {      if (firstchild()!=null) return (XmlTree)firstchild();
00020               else return null;
00021        }
00022        public boolean isText ()
00023        {      if (!haschildren()) return true;
00024               if (firstchild()!=lastchild()) return false;
00025               XmlTree t=(XmlTree)firstchild();
00026               XmlTag tag=t.getTag();
00027               if (!(tag instanceof XmlTagText)) return false;
00028               return true;
00029        }
00030        public String getText ()
00031        {      if (!haschildren()) return "";
00032               XmlTree t=(XmlTree)firstchild();
00033               XmlTag tag=t.getTag();
00034               return ((XmlTagText)tag).getContent();
00035        }
00036        ListElement Current;
00037        public Enumeration getContent ()
00038        {      Current=children().first();
00039               return this;
00040        }
00041        public boolean hasMoreElements ()
00042        {      return Current!=null;
00043        }
00044        public Object nextElement ()
00045        {      if (Current==null) return null;
00046               XmlTree c=(XmlTree)(Current.content());
00047               Current=Current.next();
00048               return c;
00049        }
00050        public String parseComment ()
00051               throws XmlReaderException
00052        {      StringBuffer s=new StringBuffer();
00053               Enumeration e=getContent();
00054               while (e.hasMoreElements())
00055               {      XmlTree tree=(XmlTree)e.nextElement();
00056                      XmlTag tag=tree.getTag();
00057                      if (tag.name().equals("P"))
00058                      {      if (!tree.haschildren()) s.append("\n");
00059                             else
00060                             {      XmlTree h=tree.xmlFirstContent();
00061                                    String k=((XmlTagText)h.getTag()).getContent();
00062                                    k=k.replace('\n',' ');
00063                                    StringParser p=new StringParser(k);
00064                                    Vector v=p.wraplines(1000);
00065                                    for (int i=0; i<v.size(); i++)
00066                                    {      s.append((String)v.elementAt(i));
00067                                           s.append("\n");
00068                                    }
00069                             }
00070                      }
00071                      else if (tag instanceof XmlTagText)
00072                      {      String k=((XmlTagText)tag).getContent();
00073                             StringParser p=new StringParser(k);
00074                             Vector v=p.wraplines(1000);
00075                             for (int i=0; i<v.size(); i++)
00076                             {      s.append((String)v.elementAt(i));
00077                                    s.append("\n");
00078                             }                    
00079                      }
00080                      else
00081                             throw new XmlReaderException("<"+tag.name()+"> not proper here.");
00082               }
00083               return s.toString();
00084        }      
00085 }