Hi Harish,

First of all, like Dave said, please calm down. You don't need to send
your question 3 times to get an answer.

You are trying to pass a file name to the MemBufInputSource. If you
wanna parse a file, you need to use LocalFileInputSource. If you wanna
use a memory buffer, as in your code, the file name argument that you're
passing is the system id parameter of the MemBufInputSource and parsing
error that you're getting has nothing to do with it.

The error message is clear. Your XML document structure is invalid.
Where do you get your input source (xml_msg in your code)? How does your
XML look like? I've seen this error often times, when people copy-paste
their XML files from the browser.

Cheers,


-Ozgur Sahoglu

-----Original Message-----
From: Harish Aroli [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 13, 2008 11:11 AM
To: [email protected]
Subject: Invalid document structure

Hello,

When I am giving the fake xml file name,  I am getting the error as
"Invalid document structure".

I was doing it like this,

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//

           const char* xmlPath ="sample.xml";
           MemBufInputSource* memBufIS = new MemBufInputSource( (const
XMLByte*)((xml_msg).c_str())   \
 
,strlen((xml_msg).c_str()),xmlPath,false);

            parser->parse(*memBufIS);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//
  

Any help is appreciated, really.

Thanks!
Harish

Cheers!
 
Harish A V


Cheers!
 
Harish A V


>>> David Bertoni <[EMAIL PROTECTED]> 6/12/2008 5:35 PM >>>
Harish Aroli wrote:
> Hello,
> em
> I got the problem but not the solution  !!!!!!
Calm down please...

> 
> I am storing the XML input from the page to a std::string xml_msg
variable.
> 
> While parsing I am giving it as parser->parse(xml_msg.c_str());  
And that API takes a system ID, so supplying the stream of bytes for an 
XML document isn't going to work.

> 
> parse() will normaly take the full or local path of the xml file or
the inputsource class.  But here I am passing the XML message itself.
> Here the parse() function is taking the full xml message as the path
or name of xml file which is having the xml message  and is giving
issues as there is no such file exists.
> 
> I don't want to read it from file.  I am already having the xml
message ready and stored inside a std::string variable.
> 
> Is there any way to handle this.
Yes.  Instead of using an API incorrectly, take a look at the MemParse 
sample application.

The extra twist in your use case will be to set the system ID of the 
InputSource to a fake XML file name with the same directory as the 
schema file.  So, pretend sample.xsd is in /home/user/sample:

MemBufInputSource is(...)

is.setSystemId("/home/user/sample/sample.xml");

Now the parser can resolve the relative reference to sample.xsd using 
the base URI of the primary document.

Another solution would be to use an EntityResolver, but that's more 
complicated.

Dave

---------------------------------------------------------------------
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] 




---------------------------------------------------------------------
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