xerces-c-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From caox <c...@lightpole.net>
Subject Re: how to validate the input source?
Date Fri, 17 Jul 2009 03:31:30 GMT
David Bertoni 写道:
> caox wrote:
>> David Bertoni 写道:
>>> caox wrote:
>>>> Alberto Massari 写道:
>>>>> Have a look at the MemParse sample.
>>>>> Alberto
>>>>> caox wrote:
>>>>>> Hi
>>>>>>    I am using the xercesc3.0.1 for xml parsing.
>>>>>>    How can I check whether the input source from a byte steam is

>>>>>> well-formed xml format? Since I want my program to raise an 
>>>>>> exception when it receives files other than xml.
>>>>>>    Appreciate your help.
>>>> Thanks a lot. I have tried the sample DOMPrint which could throw an 
>>>> exception as expect when encountered a bad-formed xml file.
>>>> But when I use xqilla to create a DOMParser, it seems can accept 
>>>> all kinds of files. The code is below:
>>>> AutoRelease<DOMLSParser> 
>>>> parser(xqillaImplementation->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS,

>>>> 0));
>>>> And this puzzled me a lot.
>>> Did you create a custom ErrorHandler instance and install it in the 
>>> parser?
>>> Dave
>> I didn't.But how to install a ErrorHandler instance in a DOMLSParser 
>> instance. I don't find the setXXX() method for this.
> OK, you actually need a DOMErrorHandler, rather than an ErrorHandler.
> The DOMPrint sample application has an example of setting the correct 
> DOMConfiguration property.  To adapt it to your use, just call 
> DOMLSParser::getDomConfig() and the set the property:
>     DOMErrorHandler* myErrorHandler = new myDOMErrorHandler();
>     DOMConfiguration* config = parser->getDomConfig();
>     config->setParameter(XMLUni::fgDOMErrorHandler, myErrorHandler);
> Dave
I have modified the code in DOMPrint sample to use DOMLSParserImpl 
instead of XercesDOMParser for testing, like below:

    DOMLSParserImpl* parser = new DOMLSParserImpl;
    DOMConfiguration* domConfig = parser->getDomConfig();

    DOMTreeErrorReporter *errReporter = new DOMTreeErrorReporter();
    domConfig->setParameter(XMLUni::fgDOMErrorHandler, errReporter);

And the result is quite different from using XercesDOMParser.

    XercesDOMParser *parser = new XercesDOMParser;

    DOMTreeErrorReporter *errReporter = new DOMTreeErrorReporter();

The code has been attached. Could you please find where the problem is?

View raw message