I am using AIX 5.2, Xerces C++ 2.4 and Xalan 1.7.
When I run the SimpleXPathAPI binary it works all OK, but I pretty much copied the code to my own program and it doesn't work.
The code is:
int
main(
int argc,
char* argv[])
{
XALAN_USING_STD(cerr)
XALAN_USING_STD(cout)
XALAN_USING_STD(endl)int theResult = 0;
if (argc != 4)
{
cerr << "Usage: SimpleXPathAPI XMLFilePath Context XPathExpression" << endl;
theResult = -1;
}
else
{
try
{
XALAN_USING_XERCES(XMLPlatformUtils)XALAN_USING_XALAN(XPathEvaluator)
XMLPlatformUtils::Initialize();
XPathEvaluator::initialize();
{
XALAN_USING_XERCES(LocalFileInputSource) XALAN_USING_XALAN(XalanDocument)
XALAN_USING_XALAN(XalanDocumentPrefixResolver)
XALAN_USING_XALAN(XalanDOMString)
XALAN_USING_XALAN(XalanNode)
XALAN_USING_XALAN(XalanSourceTreeInit)
XALAN_USING_XALAN(XalanSourceTreeDOMSupport)
XALAN_USING_XALAN(XalanSourceTreeParserLiaison)
XALAN_USING_XALAN(XObjectPtr) // Initialize the XalanSourceTree subsystem...
XalanSourceTreeInit theSourceTreeInit; // We'll use these to parse the XML file.
XalanSourceTreeDOMSupport theDOMSupport;
XalanSourceTreeParserLiaison theLiaison(theDOMSupport); // Hook the two together...
theDOMSupport.setParserLiaison(&theLiaison);const XalanDOMString theFileName( "_foo.xml" );
// Create an input source that represents a local file...
const LocalFileInputSource theInputSource(theFileName.c_str()); // Parse the document...
XalanDocument* const theDocument =
theLiaison.parseXMLStream(theInputSource);
assert(theDocument != 0);XalanDocumentPrefixResolver thePrefixResolver(theDocument);
XPathEvaluator theEvaluator;
// OK, let's find the context node...
XalanNode* const theContextNode =
theEvaluator.selectSingleNode(
theDOMSupport,
theDocument,
XalanDOMString(argv[2]).c_str(),
thePrefixResolver); if (theContextNode == 0)
{
cerr << "Warning -- No nodes matched the location path \""
<< argv[2]
<< "\"."
<< endl
<< "Execution cannot continue..."
<< endl
<< endl;
}
else
{
// OK, let's evaluate the expression...
const XObjectPtr theResult(
theEvaluator.evaluate(
theDOMSupport,
theContextNode,
XalanDOMString(argv[3]).c_str(),
thePrefixResolver));assert(theResult.null() == false);
cout << "The string value of the result is:"
<< endl
<< theResult->str()
<< endl
<< endl;
}
}XPathEvaluator::terminate();
XMLPlatformUtils::Terminate();
}
catch(...)
{
cerr << "Exception caught!" << endl; theResult = -1;
}
}return theResult; }
[EMAIL PROTECTED] wrote:
Hi Jason,
It looks like an initialization problem with Xerces-C, or perhaps a bug related to the new Xerces-C pluggable memory management feature. Can you do the following:
1. Make sure you've initialized Xerces-C 2. Make sure you've initialized Xalan-C
If you've done both, a stack trace would be interesting, because we need to see what MemoryManager instance is involved. Also, we need to know your platform/compiler and the version of Xerces-C you're using.
Thanks!
Dave
|---------+---------------------------> | | "Jason Jesso" | | | <[EMAIL PROTECTED]| | | atrix.com> | | | | | | 04/01/2004 11:30| | | AM | | | Please respond | | | to xalan-c-users| |---------+---------------------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| | | | To: [email protected] | | cc: (bcc: David N Bertoni/Cambridge/IBM) | | Subject: SimpleXPathAPI | >--------------------------------------------------------------------------------------------------------------------------------------------------|
I'm pretty doing what SimpleXPathAPI does (almost line by line).
When I run the SimpleXPathAPI it works fine, but when I run my program, I get:
./_foo _foo.xml itXML "/itXML/TX" Assertion failed: manager != 0, file XMemory.cpp, line 102 Abort(coredump)
I rounded it down to this line of code:
// Parse the document... XalanDocument* const theDocument = theLiaison.parseXMLStream(theInputSource);
Any ideas?
