1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/*
* This file is part of evQueue
*
* evQueue is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* evQueue is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with evQueue. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Thibault Kummer <bob@coldsource.net>
*/
#include <DOMXPath.h>
#include <DOMXPathResult.h>
#include <XPathEval.h>
#include <Exception.h>
DOMXPath::DOMXPath(DOMDocument *xmldoc):eval(xmldoc)
{
this->xmldoc = xmldoc;
}
void DOMXPath::RegisterFunction(std::string name,XPathEval::func_desc f)
{
eval.RegisterFunction(name,f);
}
DOMXPathResult *DOMXPath::evaluate(const std::string &xpath,DOMNode node,DOMXPathResult::ResultType result_type)
{
Token *result = eval.Evaluate(xpath,node);
if(result_type==DOMXPathResult::FIRST_RESULT_TYPE)
{
DOMXPathResult *res = new DOMXPathResult(result);
res->snapshotItem(0);
return res;
}
else if(result_type==DOMXPathResult::BOOLEAN_TYPE)
{
if(result->GetType()!=LIT_BOOL)
throw Exception("DOMXPath","Expected boolean result");
return new DOMXPathResult(result);
}
else if(result_type==DOMXPathResult::SNAPSHOT_RESULT_TYPE)
return new DOMXPathResult(result);
return 0;
}
|