#include "../config/pathan_config.h" /* * Copyright (c) 2001, DecisionSoft Limited All rights reserved. * Please see LICENSE.TXT for more information. */ #include #include #include NavStepImpl::Axis PrecedingSiblingAxis::getAxis() const { return NavStepImpl::PRECEDING_SIBLING; } Sequence PrecedingSiblingAxis::makeList(const XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *node, const XMLCh* const uri, DynamicContext* context) const { XPath2MemoryManager* memMgr=context->getMemoryManager(); const XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *parent = node->getParentNode(); if(node->getNodeType() == XERCES_CPP_NAMESPACE_QUALIFIER DOMNode::DOCUMENT_NODE) { return Sequence(memMgr); } XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* child = parent->getFirstChild(); Sequence result(memMgr); while(child!=NULL) { if(child == node) break; if(child->getNodeType() == XERCES_CPP_NAMESPACE_QUALIFIER DOMNode::ENTITY_REFERENCE_NODE) { XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *subchild=child->getLastChild(); if(subchild) { result.joinSequence(makeList(subchild,uri,context)); if(filterNode(subchild,uri,context)) result.addItem(memMgr->createNode(subchild)); } } else if(filterNode(child, uri, context)) result.addItem(memMgr->createNode(child)); child=child->getNextSibling(); } return result; }