[prev in list] [next in list] [prev in thread] [next in thread]
List: jakarta-commons-dev
Subject: svn commit: r917007 - in /commons/proper/jxpath/trunk/src:
From: mbenson () apache ! org
Date: 2010-02-27 18:34:40
Message-ID: 20100227183440.5FE2623889BF () eris ! apache ! org
[Download RAW message or body]
Author: mbenson
Date: Sat Feb 27 18:34:39 2010
New Revision: 917007
URL: http://svn.apache.org/viewvc?rev=917007&view=rev
Log:
[JXPATH-125] JXPathContext.iteratePointers() does not work with multiple prefixes for \
a single namespace URI
Added:
commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/IterateAliasedNS.xml \
(with props) commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/AliasedNamespaceIterationTest.java \
(with props) Modified:
commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java
commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java
Modified: commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java
URL: http://svn.apache.org/viewvc/commons/proper/jxpath/trunk/src/java/org/apache/comm \
ons/jxpath/ri/model/dom/DOMNodePointer.java?rev=917007&r1=917006&r2=917007&view=diff \
==============================================================================
--- commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java \
(original)
+++ commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java \
Sat Feb 27 18:34:39 2010 @@ -507,7 +507,7 @@
if (nsURI == null) {
buffer.append(ln);
buffer.append('[');
- buffer.append(getRelativePositionByName()).append(']');
+ buffer.append(getRelativePositionByQName()).append(']');
}
else {
String prefix = getNamespaceResolver().getPrefix(nsURI);
@@ -516,7 +516,7 @@
buffer.append(':');
buffer.append(ln);
buffer.append('[');
- buffer.append(getRelativePositionByName());
+ buffer.append(getRelativePositionByQName());
buffer.append(']');
}
else {
@@ -553,21 +553,26 @@
* Get relative position of this among like-named siblings.
* @return 1..n
*/
- private int getRelativePositionByName() {
+ private int getRelativePositionByQName() {
int count = 1;
Node n = node.getPreviousSibling();
while (n != null) {
- if (n.getNodeType() == Node.ELEMENT_NODE) {
- String nm = n.getNodeName();
- if (nm.equals(node.getNodeName())) {
- count++;
- }
+ if (n.getNodeType() == Node.ELEMENT_NODE && matchesQName(n)) {
+ count++;
}
n = n.getPreviousSibling();
}
return count;
}
+ private boolean matchesQName(Node n) {
+ if (getNamespaceURI() != null) {
+ return equalStrings(getNamespaceURI(n), getNamespaceURI())
+ && equalStrings(node.getLocalName(), n.getLocalName());
+ }
+ return equalStrings(node.getNodeName(), n.getNodeName());
+ }
+
/**
* Get relative position of this among all siblings.
* @return 1..n
Modified: commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java
URL: http://svn.apache.org/viewvc/commons/proper/jxpath/trunk/src/java/org/apache/comm \
ons/jxpath/ri/model/jdom/JDOMNodePointer.java?rev=917007&r1=917006&r2=917007&view=diff
==============================================================================
--- commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java \
(original)
+++ commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java \
Sat Feb 27 18:34:39 2010 @@ -641,7 +641,7 @@
if (nsURI == null) {
buffer.append(ln);
buffer.append('[');
- buffer.append(getRelativePositionByName()).append(']');
+ buffer.append(getRelativePositionByQName()).append(']');
}
else {
String prefix = getNamespaceResolver().getPrefix(nsURI);
@@ -650,7 +650,7 @@
buffer.append(':');
buffer.append(ln);
buffer.append('[');
- buffer.append(getRelativePositionByName());
+ buffer.append(getRelativePositionByQName());
buffer.append(']');
}
else {
@@ -681,7 +681,7 @@
* Get relative position of this among like-named siblings.
* @return 1..n
*/
- private int getRelativePositionByName() {
+ private int getRelativePositionByQName() {
if (node instanceof Element) {
Object parent = ((Element) node).getParent();
if (!(parent instanceof Element)) {
@@ -693,8 +693,7 @@
String name = ((Element) node).getQualifiedName();
for (int i = 0; i < children.size(); i++) {
Object child = children.get(i);
- if ((child instanceof Element)
- && ((Element) child).getQualifiedName().equals(name)) {
+ if (child instanceof Element && matchesQName(((Element) child))) {
count++;
}
if (child == node) {
@@ -706,6 +705,16 @@
return 1;
}
+ private boolean matchesQName(Element element) {
+ if (getNamespaceURI() != null) {
+ String ns = getNamespaceURI(element);
+ if (ns == null || !ns.equals(getNamespaceURI())) {
+ return false;
+ }
+ }
+ return element.getName().equals(((Element) node).getName());
+ }
+
/**
* Get relative position of this among all siblings.
* @return 1..n
Added: commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/IterateAliasedNS.xml
URL: http://svn.apache.org/viewvc/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/IterateAliasedNS.xml?rev=917007&view=auto
==============================================================================
--- commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/IterateAliasedNS.xml \
(added)
+++ commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/IterateAliasedNS.xml \
Sat Feb 27 18:34:39 2010 @@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<a:doc xmlns:a="ns">
+ <a:elem />
+ <b:elem xmlns:b="ns" />
+</a:doc>
\ No newline at end of file
Propchange: commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/IterateAliasedNS.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/AliasedNamespaceIterationTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/AliasedNamespaceIterationTest.java?rev=917007&view=auto
==============================================================================
--- commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/AliasedNamespaceIterationTest.java \
(added)
+++ commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/AliasedNamespaceIterationTest.java \
Sat Feb 27 18:34:39 2010 @@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.jxpath.ri.model;
+
+import java.util.Collection;
+
+import org.apache.commons.jxpath.JXPathContext;
+import org.apache.commons.jxpath.JXPathTestCase;
+import org.apache.commons.jxpath.xml.DocumentContainer;
+
+/**
+ * Test aliased/doubled XML namespace iteration; JXPATH-125.
+ *
+ * @version $Revision$ $Date$
+ */
+public class AliasedNamespaceIterationTest extends JXPathTestCase {
+ protected JXPathContext context;
+
+ protected DocumentContainer createDocumentContainer(String model) {
+ DocumentContainer result = new DocumentContainer(JXPathTestCase.class
+ .getResource("IterateAliasedNS.xml"), model);
+ return result;
+ }
+
+ protected JXPathContext createContext(String model) {
+ JXPathContext context = \
JXPathContext.newContext(createDocumentContainer(model)); + \
context.registerNamespace("a", "ns"); + return context;
+ }
+
+ protected void doTestIterate(String xpath, String model, Collection expected) {
+ assertXPathPointerIterator(createContext(model), xpath, expected);
+ }
+
+ protected void doTestIterate(String model) {
+ assertXPathPointerIterator(createContext(model), "/a:doc/a:elem", \
list("/a:doc[1]/a:elem[1]", "/a:doc[1]/a:elem[2]")); + }
+
+ public void testIterateDOM() {
+ doTestIterate(DocumentContainer.MODEL_DOM);
+ }
+
+ public void testIterateJDOM() {
+ doTestIterate(DocumentContainer.MODEL_JDOM);
+ }
+}
Propchange: commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/AliasedNamespaceIterationTest.java
------------------------------------------------------------------------------
svn:eol-style = native
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic