return SingletonIterator.makeIterator(doc);
} else {
return EmptyIterator.getInstance();
}
case Type.ATTRIBUTE: {
AxisIterator allElements = doc.iterateAxis(Axis.DESCENDANT, NodeKindTest.ELEMENT);
MappingFunction atts = new MappingFunction() {
public SequenceIterator map(Item item) {
return ((NodeInfo)item).iterateAxis(Axis.ATTRIBUTE);
}
};
SequenceIterator allAttributes = new MappingIterator(allElements, atts);
ItemMappingFunction test = new ItemMappingFunction() {
public Item mapItem(Item item) throws XPathException {
if ((matches((NodeInfo)item, context))) {
return item;
} else {
return null;
}
}
};
return new ItemMappingIterator(allAttributes, test);
}
case Type.ELEMENT:
case Type.COMMENT:
case Type.TEXT:
case Type.PROCESSING_INSTRUCTION: {
AxisIterator allChildren = doc.iterateAxis(Axis.DESCENDANT, NodeKindTest.makeNodeKindTest(kind));
ItemMappingFunction test = new ItemMappingFunction() {
public Item mapItem(Item item) throws XPathException {
if ((matches((NodeInfo)item, context))) {
return item;
} else {
return null;
}
}
};
return new ItemMappingIterator(allChildren, test);
}
case Type.NODE: {
AxisIterator allChildren = doc.iterateAxis(Axis.DESCENDANT);
MappingFunction attsOrSelf = new MappingFunction() {
public SequenceIterator map(Item item) {
return new PrependIterator((NodeInfo)item, ((NodeInfo)item).iterateAxis(Axis.ATTRIBUTE));
}
};