View Javadoc

1   /*   Copyright 2004 BEA Systems, Inc.
2    *
3    *   Licensed under the Apache License, Version 2.0 (the "License");
4    *   you may not use this file except in compliance with the License.
5    *   You may obtain a copy of the License at
6    *
7    *       http://www.apache.org/licenses/LICENSE-2.0
8    *
9    *   Unless required by applicable law or agreed to in writing, software
10   *   distributed under the License is distributed on an "AS IS" BASIS,
11   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   *   See the License for the specific language governing permissions and
13   *   limitations under the License.
14   */
15  
16  package com.bea.xml.stream;
17  
18  import javax.xml.namespace.QName;
19  import com.bea.xml.stream.util.EmptyIterator;
20  import com.bea.xml.stream.util.ElementTypeNames;
21  import com.bea.xml.stream.filters.TypeFilter;
22  import javax.xml.stream.events.XMLEvent;
23  import javax.xml.stream.EventFilter;
24  import javax.xml.stream.events.StartElement;
25  import javax.xml.stream.events.EndElement;
26  import javax.xml.stream.events.Characters;
27  import javax.xml.stream.XMLStreamException;
28  import javax.xml.stream.XMLEventReader;
29  import javax.xml.stream.XMLInputFactory;
30  
31  public class EventReaderFilter implements XMLEventReader {
32    private XMLEventReader parent;
33    private EventFilter filter;
34    public EventReaderFilter (XMLEventReader reader) 
35      throws XMLStreamException
36    {
37      this.parent = reader;
38    }
39    public EventReaderFilter (XMLEventReader reader, 
40                              EventFilter filter) 
41      throws XMLStreamException
42    {
43      this.parent = reader;
44      this.filter = filter;
45    }
46  
47    public void setFilter(EventFilter filter) {
48      this.filter = filter;
49    }
50  
51    public Object next() {
52      try {
53        return nextEvent();
54      } catch (XMLStreamException e) {
55        return null;
56      }
57    }
58  
59    public XMLEvent nextEvent() 
60      throws XMLStreamException 
61    {
62      if (hasNext())
63        return parent.nextEvent();
64      return null;
65    }
66  
67    public String getElementText() 
68      throws XMLStreamException
69    {
70      StringBuffer buf = new StringBuffer();
71      XMLEvent e = nextEvent();
72      if (!e.isStartElement())
73        throw new XMLStreamException(
74                                     "Precondition for readText is"+
75                                     " nextEvent().getTypeEventType() == START_ELEMENT");
76      while(hasNext()) {
77        e = peek();
78        if(e.isStartElement())
79          throw new XMLStreamException("Unexpected Element start");
80        if(e.isCharacters())
81          buf.append(((Characters) e).getData());
82        if(e.isEndElement())
83          return buf.toString();
84        nextEvent();
85      } 
86      throw new XMLStreamException("Unexpected end of Document");
87    }
88  
89    public XMLEvent nextTag() throws XMLStreamException {
90      while(hasNext()) {
91        XMLEvent e = nextEvent();
92        if (e.isCharacters() && !((Characters) e).isWhiteSpace())
93          throw new XMLStreamException("Unexpected text");
94        if (e.isStartElement() || e.isEndElement())
95          return e;
96      }
97      throw new XMLStreamException("Unexpected end of Document");
98    }
99  
100   
101   public boolean hasNext() 
102   {
103     try { 
104       while(parent.hasNext()) {
105         if (filter.accept(parent.peek())) return true;
106         parent.nextEvent();
107       }
108       return false;
109     } catch (XMLStreamException e) {
110       return false;
111     }
112   }
113 
114   public void remove() {
115     throw new UnsupportedOperationException();
116   }
117 
118   public XMLEvent peek() 
119     throws XMLStreamException
120   {
121     if (hasNext())
122       return parent.peek();
123     return null;
124   }
125 
126   public void close() 
127     throws XMLStreamException
128   {
129     parent.close();
130   }
131 
132   public Object getProperty(String name) {
133     return parent.getProperty(name);
134   }
135   
136   public static void main(String args[]) throws Exception {
137     System.setProperty("javax.xml.stream.XMLInputFactory", 
138                        "com.bea.xml.stream.MXParserFactory");
139     System.setProperty("javax.xml.stream.XMLEventFactory", 
140                        "com.bea.xml.stream.EventFactory");
141 
142 
143     /***
144     MXParser r = new MXParser();
145     r.setInput(new java.io.FileReader(args[0]));
146     XMLEventReaderBase b = new XMLEventReaderBase(r);
147     EventFilter f = new com.bea.xml.stream.filters.TypeFilter(XMLEvent.START_ELEMENT |
148                                                               XMLEvent.END_ELEMENT);
149     EventReaderFilter filteredReader = new EventReaderFilter(b,f);
150 
151     while (filteredReader.hasNext())
152       System.out.println(filteredReader.next());
153     **/
154 
155     XMLInputFactory factory = XMLInputFactory.newInstance();
156 
157     TypeFilter f = new com.bea.xml.stream.filters.TypeFilter();
158     f.addType(XMLEvent.START_ELEMENT);
159     f.addType(XMLEvent.END_ELEMENT);
160     
161  
162     XMLEventReader reader = factory.createFilteredReader(
163       factory.createXMLEventReader(new java.io.FileReader(args[0])),
164       f);
165     
166     while(reader.hasNext())
167       System.out.println(reader.nextEvent());
168 
169   }
170 }
171 
172 
173 
174 
175 
176 
177