"file:///c:/template/TestCaseReport_V1.0.dtd" should work (note the
additional forward slash).  At least, this format works for locating
schemas specified in an element's schemaLocation in Xerces 2.5.

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, February 03, 2005 11:25 AM
> To: xerces-c-dev@xml.apache.org
> Subject: Problems using SYSTEM dtd with xerces-c-2_4_0
> 
> 
> 
> 
> 
> Hello,
> 
> I'm having problems using XercesDOMParser to parse a document with the
> following prolog:
> 
> <?xml version='1.0' encoding='UTF-8'?>
> <!DOCTYPE TCR_Root SYSTEM 'c:/template/TestCaseReport_V1.0.dtd'>
> 
> I set up the parser, call parse, and I end up with an exception:
> xercesc_2_4::MalformedURLException.
> 
> My set up code:
> 
> static XercesDOMParser::ValSchemes    gValScheme       =
> XercesDOMParser::Val_Auto;
> 
> . . .
> 
> String CDOMParser::searchTag(const char* sXmlFile, string 
> sSearchedNode,
> string sSearchedAttribute)
> {
>     m_sSearchedNodeName = sSearchedNode;
>     m_sSearchedAttributeName = sSearchedAttribute;
>     m_sReturnSearchTag = "";
> 
>     // Initialisation
>     gDoNamespaces = true;
>     gDoSchema = true;
>     gSchemaFullChecking = false;
>     gDoCreate = false;
> 
>     CXercesInit oXercesInit;
> 
>     XercesDOMParser *parser = new XercesDOMParser;
>     parser->setValidationScheme(gValScheme);
>     parser->setDoNamespaces(gDoNamespaces);
>     parser->setDoSchema(gDoSchema);
>     parser->setValidationSchemaFullChecking(gSchemaFullChecking);
>     parser->setCreateEntityReferenceNodes(gDoCreate);
> 
>     CDOMTreeErrorReporter *errReporter = new CDOMTreeErrorReporter();
>     parser->setErrorHandler(errReporter);
> 
>     try
>     {
>         parser->parse(sXmlFile);
>     }
> . . .
> 
> I've followed xerces through with the MSVC7 debugger, and it 
> would seem
> that eventually ReaderMgr::createReader() tries to create an 
> XMLURL using:
> 
> XMLURL::XMLURL(const XMLCh* const    baseURL
>              , const XMLCh* const    relativeURL
>              , MemoryManager* const manager)
> 
> baseURL == path to the document being parsed
> relativeURL == path to the dtd
> 
> This constructor calls XMLURL::setURL(const XMLCh* const 
> baseURL, const
> XMLCh* const relativeURL)which calls XMLURL::parse(const XMLCh* const
> urlText), which throws the exception when it sees urlText is 
> a path.  I've
> tried adding 'file://' to the beginning of the path, but that 
> just crashes
> at the ':' trying to figure out port numbers. Relative paths 
> don't work as
> sometimes the app will be running from a different drive than 
> the dtd is
> on.  Besides, even if the dtd is a relative path, I end up 
> with exactly the
> same problem later on with the document being parsed, after
> LocalFileInputSource takes out the '..'s and puts in the d:\.
> 
> I'm really at a loss, and any help would be appreciated.
> 
> Thanks,
> 
> Adam Read
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to