10
10
import javax .xml .parsers .DocumentBuilder ;
11
11
import javax .xml .parsers .DocumentBuilderFactory ;
12
12
import java .io .File ;
13
+ import java .util .HashMap ;
13
14
import java .util .LinkedList ;
14
15
16
+
15
17
/**
16
18
* Created by wilsonli on 5/10/16.
17
19
*/
@@ -20,11 +22,23 @@ public class MyVisitor extends XqueryBaseVisitor<Object> {
20
22
/* use this stack to store the context for pass */
21
23
private LinkedList <Contex > stack = new LinkedList <Contex >();
22
24
25
+ private static LinkedList <Node > unique (LinkedList <Node > nodeList ){
26
+ System .out .println ("uniquing." );
27
+ HashMap <Node , Boolean > hash = new HashMap <>();
28
+ LinkedList <Node > res = new LinkedList <>();
29
+ for (Node node : nodeList ){
30
+ if (!hash .containsKey (node ))
31
+ res .add (node );
32
+ }
33
+ return res ;
34
+ }
35
+
23
36
@ Override public Object visitAPChildren (XqueryParser .APChildrenContext ctx ) {
24
37
/*
25
38
for rule [doc(fileName)/rp]A:
26
39
get the root node, which is fname and pass it to rp
27
40
*/
41
+
28
42
String fname = (String ) visit (ctx .doc ());
29
43
File xmlFile = new File (fname );
30
44
// open the xml file //
@@ -38,11 +52,9 @@ public class MyVisitor extends XqueryBaseVisitor<Object> {
38
52
} catch (Exception ex ) {
39
53
ex .printStackTrace ();
40
54
}
41
-
42
55
return visit (ctx .rp ());
43
56
}
44
57
45
-
46
58
@ Override public Object visitAPAll (XqueryParser .APAllContext ctx ) {
47
59
/* get the */
48
60
@@ -74,17 +86,73 @@ public class MyVisitor extends XqueryBaseVisitor<Object> {
74
86
Contex current = stack .peek ();
75
87
LinkedList <Node > res = new LinkedList <>();
76
88
for (int i = 0 ; i < current .getLength (); i ++){
77
- for (int j = 0 ; j < current .item (i ).getChildNodes ().getLength (); j ++)
78
- res .add (current .item (i ).getChildNodes ().item (j ));
89
+ NodeList tmp = current .item (i ).getChildNodes ();
90
+ for (int j = 0 ; j < tmp .getLength (); j ++)
91
+ res .add (tmp .item (j ));
79
92
}
80
93
return res ;
81
94
}
82
95
83
-
84
-
85
96
@ Override public Object visitTagName (XqueryParser .TagNameContext ctx ) {
97
+ System .out .println ("TagName running." );
86
98
LinkedList <Node > res = new LinkedList <>();
99
+ String tagName = (String ) ctx .getText ();
100
+
101
+ for (Node node : stack .peek ().getChildNodes ()){
102
+ if (tagName .equals (node .getNodeName ()))
103
+ res .add (node );
104
+ }
105
+ System .out .println ("TagName stop." );
106
+ return res ;
107
+ }
108
+
109
+ @ Override public Object visitRPwithPar (XqueryParser .RPwithParContext ctx ) {
110
+ System .out .println ("rp with parameter running." );
111
+ return visit (ctx .rp ());
112
+ }
113
+
114
+ @ Override public Object visitRPChildren (XqueryParser .RPChildrenContext ctx ) {
115
+ System .out .println ("RPChildren running." );
116
+ LinkedList <Node > x = (LinkedList <Node >) visit (ctx .rp (0 ));
117
+ Contex middle = new Contex ();
118
+ for (Node node : x )
119
+ middle .add (node );
120
+ stack .push (middle );
121
+ LinkedList <Node > y = (LinkedList <Node >) visit (ctx .rp (1 ));
122
+ System .out .println (y .size ());
123
+ LinkedList <Node > res = unique (y );
124
+ System .out .println (res .size ());
125
+ stack .pop ();
126
+ return res ;
127
+ }
128
+
129
+ // i don't think this is correct. //
130
+ @ Override public Object visitRPCondition (XqueryParser .RPConditionContext ctx ) {
131
+ System .out .println ("[rp[f]]r(n) running." );
132
+ LinkedList <Node > x = (LinkedList <Node >) visit (ctx .rp ());
133
+ Contex middle = new Contex ();
134
+ for (Node node : x )
135
+ middle .add (node );
136
+ stack .push (middle );
137
+ LinkedList <Node > res = (LinkedList <Node >) visit (ctx .fltr ());
138
+ return res ;
139
+ }
140
+
141
+ @ Override public Object visitTwoRP (XqueryParser .TwoRPContext ctx ) {
142
+ System .out .println ("[rp1,rp2]r(n) running." );
143
+ LinkedList <Node > x = (LinkedList <Node >) visit (ctx .rp (0 ));
144
+ System .out .println (x .size ());
145
+ LinkedList <Node > y = (LinkedList <Node >) visit (ctx .rp (1 ));
146
+ x .addLast (y .getFirst ());
147
+ System .out .println (x .size ());
148
+
149
+ return x ;
150
+ }
151
+
152
+ @ Override public Object visitText (XqueryParser .TextContext ctx ) {
153
+ System .out .println ("text() running." );
154
+ Contex current = stack .peek ();
155
+ return current .getChildNodes ();
87
156
88
- return visitChildren (ctx );
89
157
}
90
158
}
0 commit comments