Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1005 → Rev 1006

/zpath/trunk/src/ak/zpath/DocumentTree.java
109,7 → 109,7
if("/".equals(element.getName())) { // absolute path
element = (PathElement)path.get(1);
 
if(path.size() > 0 && "**".equals(element.getName())) {
if(path.size() > 1 && "**".equals(element.getName())) {
// special case: '/**'
startPos = 2;
}
279,9 → 279,11
{
if(pos >= path.size()) return node;
 
NodeList list = node.getChildNodes();
int count = list.getLength();
PathElement element = (PathElement)path.get(pos);
NodeList list = node.getChildNodes();
int count = list.getLength();
PathElement element = (PathElement)path.get(pos);
List idxElements = new ArrayList(); // list of desired elements
// if some index is specified
 
// special element name - parent element
if("..".equals(element.getName())) {
307,9 → 309,18
Element e = (Element)subnode;
 
if(testElement(element, params, e)) {
return doStep(path, ++pos, params, e, update);
if(element.getIndex() >= 0)
idxElements.add(0, e); // if index specified then collect all desired nodes to list
else
return doStep(path, ++pos, params, e, update); // otherwise go to the node immed.
}
}
 
// if index specified, test the collected desired items
if(element.getIndex() >= 0) {
if(element.getIndex() < idxElements.size()) // go to the node
return doStep(path, ++pos, params, (Element)idxElements.get(element.getIndex()), update);
}
}
 
// nothing found
317,12 → 328,21
if(element.getName() == null)
throw new PathCreateException("Cannot create element with name '*'");
 
Element newElement = document.createElement(element.getName());
setupElement(element, params, newElement);
node.appendChild(newElement);
lastElement = newElement;
Element newElement = null;
 
return doStep(path, ++pos, params, newElement, update);
if(element.getIndex() >= 0) {
for(int i = idxElements.size(); i <= element.getIndex(); i++) {
newElement = createNewElement(element, params, node); // we need the last one only
}
}
else {
newElement = createNewElement(element, params, node);
}
 
if(newElement == null)
throw new PathCreateException("Cannot create new element, internal error");
else
return doStep(path, ++pos, params, newElement, update);
}
else { // not allowed to change document
return null;
329,6 → 349,16
}
}
 
protected Element createNewElement(PathElement element, Map params, Element node)
{
Element newElement = document.createElement(element.getName());
setupElement(element, params, newElement);
node.appendChild(newElement);
lastElement = newElement;
 
return newElement;
}
 
protected void setupElement(PathElement element, Map params, Element node)
{
for(Iterator i = element.getConditions().iterator(); i.hasNext(); ) {
534,6 → 564,20
"d", "0003"
} );
 
// text indices
tree.updateDocument(
"/Vertrag/i# := '0'",
null);
tree.updateDocument(
"/Vertrag/i[1]# := '1'",
null);
tree.updateDocument(
"/Vertrag/i[7]# := '7'",
null);
tree.updateDocument(
"/Vertrag/i[4]# := '4'",
null);
 
// test search -------------------------------------------------------------
 
tree.searchElement("/Vertrag/Sparten", (Object[])null);