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 public abstract class SkipNodeFilter extends XMLFilterImpl {
45
46 private final static String NODE_TAG = "sv:node";
47 private final static String NAME_TAG = "sv:name";
48
49 private boolean skipping;
50
51 private int skipDepth;
52
53 public SkipNodeFilter(XMLReader parent) {
54 super(parent);
55 }
56
57 @Override
58 public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
59 if (!skipping) {
60 super.ignorableWhitespace(ch, start, length);
61 }
62 }
63
64 @Override
65 public void characters(char[] ch, int start, int length)
66 throws SAXException {
67 if (!skipping) {
68 super.characters(ch, start, length);
69 }
70 }
71
72 @Override
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 @Override
90 public void endElement(String uri, String localName, String qName)
91 throws SAXException {
92
93 if (skipping) {
94 if (skipDepth == 0) {
95 skipping = false;
96 } else {
97 skipDepth--;
98 }
99 return;
100 }
101
102 super.endElement(uri, localName, qName);
103 }
104
105
106
107
108
109
110 protected abstract String getFilteredNodeName();
111
112 }