1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.xml.xpath;
18
19 import java.util.Properties;
20 import javax.xml.transform.Source;
21 import javax.xml.transform.TransformerException;
22 import javax.xml.transform.dom.DOMResult;
23
24 import org.springframework.xml.transform.TransformerObjectSupport;
25 import org.w3c.dom.DOMException;
26 import org.w3c.dom.Document;
27 import org.w3c.dom.Element;
28 import org.w3c.dom.Node;
29
30
31
32
33
34
35
36 public abstract class AbstractXPathTemplate extends TransformerObjectSupport implements XPathOperations {
37
38 private Properties namespaces;
39
40
41 public Properties getNamespaces() {
42 return namespaces;
43 }
44
45
46 public void setNamespaces(Properties namespaces) {
47 this.namespaces = namespaces;
48 }
49
50 public final void evaluate(String expression, Source context, NodeCallbackHandler callbackHandler)
51 throws XPathException {
52 evaluate(expression, context, new NodeCallbackHandlerNodeMapper(callbackHandler));
53 }
54
55
56 private static class NodeCallbackHandlerNodeMapper implements NodeMapper {
57
58 private final NodeCallbackHandler callbackHandler;
59
60 public NodeCallbackHandlerNodeMapper(NodeCallbackHandler callbackHandler) {
61 this.callbackHandler = callbackHandler;
62 }
63
64 public Object mapNode(Node node, int nodeNum) throws DOMException {
65 callbackHandler.processNode(node);
66 return null;
67 }
68 }
69
70
71
72
73
74
75
76 protected Element getRootElement(Source source) throws TransformerException {
77 DOMResult domResult = new DOMResult();
78 transform(source, domResult);
79 Document document = (Document) domResult.getNode();
80 return document.getDocumentElement();
81 }
82
83 }