本文整理汇总了C++中XPathExecutionContext::getXObjectFactory方法的典型用法代码示例。如果您正苦于以下问题:C++ XPathExecutionContext::getXObjectFactory方法的具体用法?C++ XPathExecutionContext::getXObjectFactory怎么用?C++ XPathExecutionContext::getXObjectFactory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XPathExecutionContext
的用法示例。
在下文中一共展示了XPathExecutionContext::getXObjectFactory方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: XObjectPtr
XObjectPtr
FunctionGenerateID::execute(
XPathExecutionContext& executionContext,
XalanNode* context,
const LocatorType* locator) const
{
if (context == 0)
{
executionContext.error(
XalanMessageLoader::getMessage(XalanMessages::FunctionRequiresNonNullContextNode_1Param,"generate-id()"),
context,
locator);
return XObjectPtr();
}
else
{
XPathExecutionContext::GetAndReleaseCachedString theID(executionContext);
theID.get() = XalanUnicode::charLetter_N;
getSuffix(context, theID.get());
return executionContext.getXObjectFactory().createString(theID);
}
}
示例2: execute
XObjectPtr CExternalFunction::execute( XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const Locator* /* locator */) const
{
assert(arg1.null() == false);
const XalanDOMString& arg = arg1->str();
//convert XalanDOMString (implemented as unsigned short*) into StringBuffer
StringBuffer sbInput;
sbInput.ensureCapacity(arg.length()+1);
size32_t len = arg.length();
for (size32_t i=0; i < len; i++)
sbInput.append( (char) arg[i]);
StringBuffer sbOutput;
try
{
(*m_userFunction)(sbOutput, sbInput.str(), m_pTransform);
}
catch (IException* e)
{
StringBuffer msg;
e->errorMessage(msg);
e->Release();
}
catch (...)
{
}
XalanDOMString xdsOutput( sbOutput.str() );
return executionContext.getXObjectFactory().createString( xdsOutput );
}
示例3:
XObjectPtr
FunctionFormatNumber::execute(
XPathExecutionContext& executionContext,
XalanNode* context,
const XObjectPtr arg1,
const XObjectPtr arg2,
const XObjectPtr arg3,
const LocatorType* locator) const
{
assert(arg1.null() == false && arg2.null() == false && arg3.null() == false);
const double theNumber = arg1->num();
const XalanDOMString& thePattern = arg2->str();
const XalanDOMString& theDFSName = arg3->str();
assert(length(theDFSName) != 0);
typedef XPathExecutionContext::GetAndReleaseCachedString GetAndReleaseCachedString;
GetAndReleaseCachedString theString(executionContext);
executionContext.formatNumber(
theNumber,
thePattern,
theDFSName,
theString.get(),
context,
locator);
return executionContext.getXObjectFactory().createString(theString);
}
示例4: assert
XObjectPtr
FunctionLang::execute(
XPathExecutionContext& executionContext,
XalanNode* context,
const XObjectPtr arg1,
const LocatorType* /* locator */) const
{
assert(arg1.null() == false);
const XalanNode* parent = context;
bool fMatch = false;
const XalanDOMString& lang = arg1->str();
while(0 != parent)
{
if(XalanNode::ELEMENT_NODE == parent->getNodeType())
{
const XalanElement* const theElementNode =
#if defined(XALAN_OLD_STYLE_CASTS)
(const XalanElement*)parent;
#else
static_cast<const XalanElement*>(parent);
#endif
const XalanDOMString& langVal =
theElementNode->getAttributeNS(
DOMServices::s_XMLNamespaceURI,
s_attributeName);
if(0 != length(langVal))
{
XPathExecutionContext::GetAndReleaseCachedString theGuard1(executionContext);
XPathExecutionContext::GetAndReleaseCachedString theGuard2(executionContext);
if(startsWith(toLowerCaseASCII(langVal, theGuard1.get()), toLowerCaseASCII(lang, theGuard2.get())))
{
const XalanDOMString::size_type valLen = length(lang);
if(length(langVal) == valLen ||
charAt(langVal, valLen) == XalanUnicode::charHyphenMinus)
{
fMatch = true;
break;
}
}
}
}
parent = DOMServices::getParentOfNode(*parent);
}
return executionContext.getXObjectFactory().createBoolean(fMatch);
}
示例5: assert
XObjectPtr
FunctionElementAvailable::execute(
XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const LocatorType* locator) const
{
assert(arg1.null() == false);
return executionContext.getXObjectFactory().createBoolean(
executionContext.elementAvailable(arg1->str(), locator));
}
示例6: createEmptyString
XObjectPtr
FunctionSubstringBefore::execute(
XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType* /* locator */) const
{
assert(arg1.null() == false && arg2.null() == false);
const XalanDOMString& theFirstString = arg1->str();
const XalanDOMString::size_type theFirstStringLength = length(theFirstString);
if (theFirstStringLength == 0)
{
return createEmptyString(executionContext);
}
else
{
const XalanDOMString& theSecondString = arg2->str();
const XalanDOMString::size_type theSecondStringLength = length(theSecondString);
if (theSecondStringLength == 0)
{
return createEmptyString(executionContext);
}
else
{
const XalanDOMString::size_type theIndex = indexOf(theFirstString,
theSecondString);
if (theIndex == theFirstStringLength)
{
return createEmptyString(executionContext);
}
else
{
XPathExecutionContext::GetAndReleaseCachedString theResult(executionContext);
XalanDOMString& theString = theResult.get();
theString.assign(
toCharArray(theFirstString),
theIndex);
// Create a string of the appropriate length...
return executionContext.getXObjectFactory().createString(theResult);
}
}
}
}
示例7: assert
XObjectPtr
FunctionStartsWith::execute(
XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const XObjectPtr arg2,
const Locator* const /* locator */) const
{
assert(arg1.null() == false && arg2.null() == false);
const bool fStartsWith =
startsWith(
arg1->str(executionContext),
arg2->str(executionContext));
return executionContext.getXObjectFactory().createBoolean(fStartsWith);
}
示例8: theGuard
XObjectPtr
FunctionHasSameNodes::execute(
XPathExecutionContext& executionContext,
XalanNode* context,
const XObjectArgVectorType& args,
const LocatorType* locator) const
{
if (args.size() != 2)
{
XPathExecutionContext::GetAndReleaseCachedString theGuard(executionContext);
executionContext.error(getError(theGuard.get()), context, locator);
}
assert(args[0].null() == false && args[1].null() == false);
const NodeRefListBase& nodeset1 = args[0]->nodeset();
const NodeRefListBase& nodeset2 = args[1]->nodeset();
const NodeRefListBase::size_type theLength = nodeset1.getLength();
bool fResult = true;
if (theLength != nodeset2.getLength())
{
fResult = false;
}
else
{
for (NodeRefListBase::size_type i = 0; i < theLength && fResult == true; ++i)
{
XalanNode* const theNode = nodeset1.item(i);
assert(theNode != 0);
if (nodeset2.indexOf(theNode) == NodeRefListBase::npos)
{
fResult = false;
}
}
}
return executionContext.getXObjectFactory().createBoolean(fResult);
}
示例9: assert
XObjectPtr
FunctionString::execute(
XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const LocatorType* /* locator */) const
{
assert(arg1.null() == false);
if (arg1->getType() == XObject::eTypeString)
{
// Since XObjects are reference counted, just return the
// argument.
return arg1;
}
else
{
return executionContext.getXObjectFactory().createStringAdapter(arg1);
}
}
示例10: XalanDOMString
XALAN_CPP_NAMESPACE_USE
/**
* Execute an XPath function object. The function must return a valid
* XObject.
*
* @param executionContext executing context
* @param context current context node
* @param opPos current op position
* @param args vector of pointers to XObject arguments
* @return pointer to the result XObject
*/
XObjectPtr FunctionBase64::execute( XPathExecutionContext& executionContext, XalanNode* context, const XObjectArgVectorType& args, const LocatorType* locator ) const
{
XALAN_USING_XALAN( XalanDOMString );
if ( args.size() != 3 )
{
stringstream errorMessage;
errorMessage << "The Base64() function takes 3 arguments [ nodeset, trailer, envelope ], but received " << args.size();
#if (_XALAN_VERSION >= 11100)
executionContext.problem( XPathExecutionContext::eXPath, XPathExecutionContext::eError, XalanDOMString( errorMessage.str().c_str() ), locator, context);
#else
executionContext.error( XalanDOMString( errorMessage.str().c_str() ), context );
#endif
}
stringstream stringToEncode;
string envelopeName = localForm( ( const XMLCh* )( args[ 2 ]->str().data() ) );
stringToEncode << "<" << envelopeName << ">";
for( unsigned int i=0; i<args[ 0 ]->nodeset().getLength(); i++ )
{
stringToEncode << XPathHelper::SerializeToString( args[ 0 ]->nodeset().item( i ) );
}
stringToEncode << localForm( ( const XMLCh* )( args[ 1 ]->str().data() ) ) << "</" << envelopeName << ">";
string encodedString = Base64::encode( stringToEncode.str() );
return executionContext.getXObjectFactory().createString( unicodeForm( encodedString ) );
}
示例11: XObjectPtr
XObjectPtr
FunctionString::execute(
XPathExecutionContext& executionContext,
XalanNode* context,
const LocatorType* locator) const
{
if (context == 0)
{
XPathExecutionContext::GetAndReleaseCachedString theGuard(executionContext);
XalanDOMString& theResult = theGuard.get();
executionContext.error(
XalanMessageLoader::getMessage(
theResult,
XalanMessages::FunctionRequiresNonNullContextNode_1Param,
"string"),
context,
locator);
// Dummy return value...
return XObjectPtr();
}
else
{
// The XPath standard says that if there are no arguments,
// the argument defaults to a node set with the context node
// as the only member. The string value of a node set is the
// string value of the first node in the node set.
// DOMServices::getNodeData() will give us the data.
// Get a cached string...
XPathExecutionContext::GetAndReleaseCachedString theData(executionContext);
XalanDOMString& theString = theData.get();
DOMServices::getNodeData(*context, theString);
return executionContext.getXObjectFactory().createString(theData);
}
}
示例12: execute
XALAN_CPP_NAMESPACE_USE
/**
* Execute an XPath function object. The function must return a valid
* XObject.
*
* @param executionContext executing context
* @param context current context node
* @param opPos current op position
* @param args vector of pointers to XObject arguments
* @return pointer to the result XObject
*/
XObjectPtr FunctionHash::execute( XPathExecutionContext& executionContext, XalanNode* context, const XObjectArgVectorType& args, const LocatorType* locator ) const
{
if ( args.size() != 1 )
{
stringstream errorMessage;
errorMessage << "The Hash() function takes one argument! [ stringToCRC ], but received " << args.size();
#if (_XALAN_VERSION >= 11100)
executionContext.problem( XPathExecutionContext::eXPath, XPathExecutionContext::eError, XalanDOMString( errorMessage.str().c_str() ), locator, context);
#else
executionContext.error( XalanDOMString( errorMessage.str().c_str() ), context );
#endif
}
string stringToCalculateCRC = localForm( ( const XMLCh* )( args[0]->str().data() ) );
//DEBUG( "Expression to calculate crc for : [" << stringToCalculateCRC << "]" );
stringstream messageHash;
/*MD5 md5Value;
md5Value.update( ( unsigned char* )&stringToCalculateCRC , stringToCalculateCRC.length() );
md5Value.finalize ();
*/
//DEBUG( "MD5 = [" << md5Value.hex_digest() << "]" );
//return executionContext.getXObjectFactory().createString( unicodeForm( md5Value.hex_digest() ) );
return executionContext.getXObjectFactory().createString( unicodeForm( md5( stringToCalculateCRC ).c_str() ) );
}
示例13: assert
XObjectPtr
FunctionSample::execute(
XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const XObjectPtr arg2,
const Locator* /* locator */) const
{
assert(arg1.null() == false);
assert(arg2.null() == false);
XalanDOMString path;
arg1->str(path);
const bool bLinux = arg2->boolean();
XalanDOMChar dchOld;
XalanDOMChar dchNew;
if (bLinux)
{
dchOld = '\\';
dchNew = '/';
}
else
{
dchOld = '/';
dchOld = '\\';
}
int len = path.length();
for (int i=0; i<len; i++)
if (path[i] == dchOld)
path[i] = dchNew;
return executionContext.getXObjectFactory().createString(path);
}
示例14: createEmptyString
XObjectPtr
FunctionSubstringAfter::execute(
XPathExecutionContext& executionContext,
XalanNode* /* context */,
const XObjectPtr arg1,
const XObjectPtr arg2,
const LocatorType* /* locator */) const
{
assert(arg1.null() == false && arg2.null() == false);
const XalanDOMString& theFirstString = arg1->str();
const XalanDOMString::size_type theFirstStringLength = length(theFirstString);
if (theFirstStringLength == 0)
{
return createEmptyString(executionContext);
}
else
{
const XalanDOMString& theSecondString = arg2->str();
const XalanDOMString::size_type theSecondStringLength = length(theSecondString);
if (theSecondStringLength == 0)
{
return arg1;
}
else
{
const XalanDOMString::size_type theIndex = indexOf(theFirstString,
theSecondString);
if (theIndex == theFirstStringLength)
{
return createEmptyString(executionContext);
}
else
{
const XalanDOMString::size_type theSecondStringLength = length(theSecondString);
// Find the first character, which will be the offset of the index of the
// beginning of the second string, plus the length of the second string.
const XalanDOMChar* const theFirstCharacter =
toCharArray(theFirstString) + theIndex + theSecondStringLength;
// The remaining length is just the opposite -- the length of the string,
// minus the index, minus the length of the second string.
const XalanDOMString::size_type theSubstringLength =
theFirstStringLength - theIndex - theSecondStringLength;
XPathExecutionContext::GetAndReleaseCachedString theResult(executionContext);
XalanDOMString& theString = theResult.get();
assign(
theString,
theFirstCharacter,
theSubstringLength);
return executionContext.getXObjectFactory().createString(theResult);
}
}
}
}