1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.importexport.filters;
35
36 import org.xml.sax.Attributes;
37 import org.xml.sax.SAXException;
38 import org.xml.sax.XMLReader;
39 import org.xml.sax.helpers.XMLFilterImpl;
40
41
42
43
44
45
46
47 public abstract class SkipNodeFilter extends XMLFilterImpl {
48
49 private final static String NODE_TAG = "sv:node";
50 private final static String NAME_TAG = "sv:name";
51
52 private boolean skipping;
53
54 private int skipDepth;
55
56 public SkipNodeFilter(XMLReader parent) {
57 super(parent);
58 }
59
60 public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
61 if (!skipping) {
62 ignorableWhitespace(ch, start, length);
63 }
64 }
65
66 public void characters(char[] ch, int start, int length)
67 throws SAXException {
68 if (!skipping) {
69 super.characters(ch, start, length);
70 }
71 }
72
73 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
74
75 String svname = atts.getValue(NAME_TAG);
76
77 if (skipping) {
78 skipDepth++;
79 return;
80 }
81 if (NODE_TAG.equals(qName) && getFilteredNodeName().equals(svname)) {
82 skipping = true;
83 return;
84 }
85
86 super.startElement(uri, localName, qName, atts);
87 }
88
89 public void endElement(String uri, String localName, String qName)
90 throws SAXException {
91
92 if (skipping) {
93 if (skipDepth == 0) {
94 skipping = false;
95 } else {
96 skipDepth--;
97 }
98 return;
99 }
100
101 super.endElement(uri, localName, qName);
102 }
103
104
105
106
107
108
109 protected abstract String getFilteredNodeName();
110
111 }