1 import javax.xml.parsers.DocumentBuilderFactory;
2 import org.w3c.dom.Document;
3 import org.w3c.dom.Node;
4 import org.w3c.dom.NodeList;
5 import fxslt.memory.TatooEngine;
6 import fxslt.memory.TatooEngine.CustomBlock;
7 import fxslt.memory.TatooEngine.Tree;
8 import fxslt.memory.TatooEngine.Automaton;
9 import fxslt.memory.MutableNodeList;
11 import javax.xml.transform.*;
12 import javax.xml.transform.dom.*;
13 import javax.xml.transform.stream.*;
16 public class TatooTest {
18 public static void start_timer() {
19 timer = System.nanoTime();
21 public static void stop_timer (String msg) {
22 long time = System.nanoTime() - timer;
23 System.err.println(msg + " " + time/1000000 + "ms");
27 public static void main(String args[])
32 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
33 dbf.setCoalescing(true);
34 dbf.setNamespaceAware(true);
37 Document doc = dbf.newDocumentBuilder().parse(args[0]);
38 stop_timer("Parsing document");
40 MutableNodeList mnl = new MutableNodeList();
42 CustomBlock<Tree> tree = TatooEngine.init_document (doc);
43 stop_timer("Initializing document");
48 CustomBlock<Automaton> auto = TatooEngine.compile(args[1]);
49 stop_timer("Compiling query");
52 NodeList nodes = TatooEngine.evaluate(auto, tree, mnl);
53 stop_timer("Evaluating query");
55 if (args.length >= 3 && args[2] == "print" ) {
57 Transformer serializer = TransformerFactory.newInstance().newTransformer();
58 serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
59 StreamResult o = new StreamResult(System.out);
60 System.out.println("<xml_result num=\"1\">");
61 for(int i = 0; i < nodes.getLength(); i++){
62 Node n = nodes.item(i);
63 switch (n.getNodeType()) {
64 case Node.ATTRIBUTE_NODE:
65 System.out.print (n.getNodeName() + "=" + n.getNodeValue());
68 serializer.transform(new DOMSource(nodes.item(i)), o);
73 System.out.println("</xml_result>");
74 stop_timer("Serializing document");
76 System.err.println("Number of results: " + nodes.getLength());
77 } catch (Exception e) {
78 System.err.println(e);