01: /*
02: * ============================================================================
03: * GNU Lesser General Public License
04: * ============================================================================
05: *
06: * JasperReports - Free Java report-generating library.
07: * Copyright (C) 2001-2006 JasperSoft Corporation http://www.jaspersoft.com
08: *
09: * This library is free software; you can redistribute it and/or
10: * modify it under the terms of the GNU Lesser General Public
11: * License as published by the Free Software Foundation; either
12: * version 2.1 of the License, or (at your option) any later version.
13: *
14: * This library is distributed in the hope that it will be useful,
15: * but WITHOUT ANY WARRANTY; without even the implied warranty of
16: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17: * Lesser General Public License for more details.
18: *
19: * You should have received a copy of the GNU Lesser General Public
20: * License along with this library; if not, write to the Free Software
21: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22: *
23: * JasperSoft Corporation
24: * 303 Second Street, Suite 450 North
25: * San Francisco, CA 94107
26: * http://www.jaspersoft.com
27: */
28: package net.sf.jasperreports.engine.util.xml;
29:
30: import javax.xml.transform.TransformerException;
31:
32: import net.sf.jasperreports.engine.JRException;
33:
34: import org.apache.xpath.CachedXPathAPI;
35: import org.apache.xpath.objects.XObject;
36: import org.w3c.dom.Node;
37: import org.w3c.dom.NodeList;
38:
39: /**
40: * XPath executer implementation that uses <a href="http://xml.apache.org/xalan-j/" target="_blank">Apache Xalan</a>.
41: *
42: * @author Lucian Chirita (lucianc@users.sourceforge.net)
43: * @version $Id: XalanXPathExecuter.java 1756 2007-06-14 16:11:20Z lucianc $
44: */
45: public class XalanXPathExecuter implements JRXPathExecuter {
46:
47: // XPath API facade
48: private CachedXPathAPI xpathAPI = new CachedXPathAPI();
49:
50: /**
51: * Default constructor.
52: */
53: public XalanXPathExecuter() {
54: }
55:
56: public NodeList selectNodeList(Node contextNode, String expression)
57: throws JRException {
58: try {
59: return xpathAPI.selectNodeList(contextNode, expression);
60: } catch (TransformerException e) {
61: throw new JRException(
62: "XPath selection failed. Expression: " + expression,
63: e);
64: }
65: }
66:
67: public Object selectObject(Node contextNode, String expression)
68: throws JRException {
69: try {
70: Object value;
71: XObject object = xpathAPI.eval(contextNode, expression);
72: switch (object.getType()) {
73: case XObject.CLASS_NODESET:
74: value = object.nodeset().nextNode();
75: break;
76: case XObject.CLASS_BOOLEAN:
77: value = object.bool() ? Boolean.TRUE : Boolean.FALSE;
78: break;
79: case XObject.CLASS_NUMBER:
80: value = new Double(object.num());
81: break;
82: default:
83: value = object.str();
84: break;
85: }
86: return value;
87: } catch (TransformerException e) {
88: throw new JRException(
89: "XPath selection failed. Expression: " + expression,
90: e);
91: }
92: }
93:
94: }
|