[Expat-discuss] Verify xml-file with dtd?
Mikael Ryding (LI/EAB)
mikael.ryding at ericsson.com
Fri Mar 4 17:33:23 CET 2005
Hi!
I'm writing a program that uses EXPAT to parse an xml-file and to verify its structure with a dtd-file, but it ONLY verifies the syntax for the xml-ile and dtd-file separately, I don't manage to get the parser to compare the files and verify that the xml-file "implements" the dtd so to speak. I can use any valid DTD (that has nothing to do with my xml-file) and the parser finds it ok.
Does someone have an idea what I do wrong? Below is part of the code that includes the DTD-parts (everything else removed):
---------------------------
int dtdHandler (XML_Parser parser, const XML_Char *context, const XML_Char *base,
const XML_Char *systemId, const XML_Char *publicId)
{
XML_Parser dtdParser = XML_ExternalEntityParserCreate(parser, context, 0);
status = XML_Parse(dtdParser, buf, len, 1);
if (!status) {
printf("dtdparsing: %s at line %d, column: %d, errorCode: %d\n",
XML_ErrorString(XML_GetErrorCode(dtdParser)),
XML_GetCurrentLineNumber(dtdParser),
XML_GetCurrentColumnNumber(dtdParser));
return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
}
return status;
}
----------------------------
int main ()
{
/* Set user data */
XML_SetUserData(parser, fd_p);
/* DTD parsing */
XML_SetExternalEntityRefHandler(parser, dtdHandler);
XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
/* Set element and character data handler */
XML_SetElementHandler(parser, startElement, endElement);
do {
if (!XML_Parse(parser, buf, len, len==0)) {
printf("xmlparsing: %s at line %d, column: %d\n",
XML_ErrorString(XML_GetErrorCode(parser)),
XML_GetCurrentLineNumber(parser),
XML_GetCurrentColumnNumber(parser));
}
}
Regards, Mikael
More information about the Expat-discuss
mailing list