1
/* Copyright 2005 Elliotte Rusty Harold
3
This library is free software; you can redistribute it and/or modify
4
it under the terms of version 2.1 of the GNU Lesser General Public
5
License as published by the Free Software Foundation.
7
This library is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU Lesser General Public License for more details.
12
You should have received a copy of the GNU Lesser General Public
13
License along with this library; if not, write to the
14
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
15
Boston, MA 02111-1307 USA
17
You can contact Elliotte Rusty Harold by sending e-mail to
18
elharo@metalab.unc.edu. Please include the word "XOM" in the
19
subject line. The XOM home page is located at http://www.xom.nu/
24
import java.util.Iterator;
25
import java.util.List;
26
import java.util.ListIterator;
28
import org.jaxen.BaseXPath;
29
import org.jaxen.FunctionContext;
30
import org.jaxen.JaxenException;
31
import org.jaxen.XPathFunctionContext;
36
* @author Elliotte Rusty Harold
40
class JaxenConnector extends BaseXPath {
43
private static final long serialVersionUID = 9025734269448515308L;
45
private static FunctionContext functionContext = new XPathFunctionContext(false);
48
JaxenConnector(String expression) throws JaxenException {
49
super(expression, new JaxenNavigator());
50
// possible thread-safety issue????
51
this.setFunctionContext(functionContext);
55
public List selectNodes(Object expression) throws JaxenException {
57
List result = super.selectNodes(expression);
58
// Text objects are returned wrapped in a List.
59
// We need to unwrap them here.
60
ListIterator iterator = result.listIterator();
61
while (iterator.hasNext()) {
62
Object next = iterator.next();
63
if (next instanceof List) {
65
// replace the list with the first item in the list
66
iterator.set(l.get(0));
67
// insert any subsequent Text objects into the list
69
Iterator texts = l.listIterator(1);
70
while (texts.hasNext()) {
71
iterator.add(texts.next());