1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.bea.xml.stream;
17
18 import com.bea.xml.stream.filters.TypeFilter;
19 import com.bea.xml.stream.filters.NameFilter;
20 import javax.xml.namespace.QName;
21 import javax.xml.stream.XMLStreamException;
22 import javax.xml.stream.XMLStreamReader;
23 import javax.xml.stream.XMLInputFactory;
24 import javax.xml.stream.StreamFilter;
25 import javax.xml.stream.events.XMLEvent;
26 import javax.xml.stream.StreamFilter;
27
28 /***
29 * <p> Apply a filter to the StreamReader </p>
30 */
31
32 public class StreamReaderFilter
33 extends ReaderDelegate
34 {
35 private StreamFilter filter;
36
37 public StreamReaderFilter(XMLStreamReader reader) {
38 super(reader);
39 }
40
41 public StreamReaderFilter(XMLStreamReader reader,
42 StreamFilter filter) {
43 super(reader);
44 setFilter(filter);
45 }
46
47 public void setFilter(StreamFilter filter) {
48 this.filter = filter;
49 }
50
51 public int next()
52 throws XMLStreamException
53 {
54 if (hasNext())
55 return super.next();
56 throw new IllegalStateException("next() may not be called "+
57 " when there are no more "+
58 " items to return");
59 }
60
61 public boolean hasNext()
62 throws XMLStreamException
63 {
64 while (super.hasNext()) {
65 if (filter.accept(getDelegate())) return true;
66 super.next();
67 }
68 return false;
69 }
70
71
72 public static void main(String args[]) throws Exception {
73 System.setProperty("javax.xml.stream.XMLInputFactory",
74 "com.bea.xml.stream.MXParserFactory");
75
76 XMLInputFactory factory = XMLInputFactory.newInstance();
77
78 TypeFilter f = new com.bea.xml.stream.filters.TypeFilter();
79 f.addType(XMLEvent.START_ELEMENT);
80 f.addType(XMLEvent.END_ELEMENT);
81 XMLStreamReader reader = factory.createFilteredReader(
82 factory.createXMLStreamReader(new java.io.FileReader(args[0])),(StreamFilter)f);
83 while(reader.hasNext()) {
84 System.out.println(reader.getLocalName());
85 reader.next();
86 }
87
88
89 NameFilter nf = new NameFilter(new QName("banana","B"));
90 XMLStreamReader reader2 = factory.createFilteredReader(
91 factory.createXMLStreamReader(new java.io.FileReader(args[0])),(StreamFilter)nf);
92
93 XMLStreamRecorder r = new XMLStreamRecorder(new java.io.OutputStreamWriter(new java.io.FileOutputStream("out.stream")));
94
95
96 while(reader2.hasNext()) {
97 r.write(reader2);
98 reader2.next();
99 }
100 r.flush();
101
102 }
103 }