[xml] Questions about libxml2 SAX Interface!
- From: "Spirit" <xrh nanjing-fnst com>
- To: <xml gnome org>
- Cc: "Jiangwc" <ala nanjing-fnst com>
- Subject: [xml] Questions about libxml2 SAX Interface!
- Date: Tue, 27 May 2003 10:38:22 +0800
Hi everyone,
I am a new user of libxml library. Perfect as it really is, I think this library is very good.
However,It's not a simple thing to make clear how to ues this library. Now, there are some basic questions
about the SAX interface:
Q1. I have an xml file named 'a.xml'. In order to parse this file with the sax interface, what I know is
the following:
a. defining my callback functions (such as startDocument, startElement,etc.)
b. accounting a new variant of 'xmlSaxHandler' structure, and then set the my own callbace function
into it
c. calling ' xmlSAXUserParseFile' function with the sax handler and 'a.xml' file
Basically, are the above steps right?
Q2.If errors eccur during parsing file, how can I locate the error position?
If some errors occur in 'a.xml', the libxml sax parser will call the callback function 'error',which
I have set into the 'sax handler', to notify that error. How can I know the error position of the source
document? I think I should user the document locator.
I can get the document locator pointer in callback functiong 'setDocumentLocator', However, the
member functions 'int (*getLineNumber)(void *ctx)' and ' int (*getColumnNumber)(void *ctx)' of the document
loctator strcuture need the 'xmlParserCtxt' pointer when being called. Therefore, How can I get the current
xmlParserCtxt when parsing xml file?
Q3. How can I deal with the entity?
I get the 'a.xml' file with following content:
a.xml
--------------
<?xml version="1.0" encoding="SHIFT_JIS"?>
<!DOCTYPE sax2A:root[
<!ELEMENT sax2A:root (sax2A:document)>
<!ELEMENT sax2A:document (#PCDATA)>
<!ATTLIST sax2A:root xmlns:sax2A CDATA #IMPLIED>
<!ATTLIST sax2A:document sax2A:attr1 CDATA #IMPLIED
sax2A:attr2 CDATA #IMPLIED>
<!ENTITY sax "ddd">
]>
<sax2A:root xmlns:sax2A= "http://www.w3.org/XML/1998/namespace">
<sax2A:document sax2A:attr1="0" sax2A:attr2="&sax;">AAAAAAAA</sax2A:document>
</sax2A:root>
My own callback functions just are programmed to print the current event.E.g. in startDocument, it
only prints 'document start' string.
Then I get following output:
---------------------------
[ala xml_server ala]$ ./sax_test a.xml
Parse file Name: a.xml
Locator start
Document start
elementDecl
elementDecl
attrbuteDecl
attrbuteDecl
attrbuteDecl
entityDecl
name sax content ddd
entityDecl
name sax content ddd
Element start
Error : Entity 'sax' not defined
Document End
a. According to the above output, why does the entity declaration event occur twice? As the xml source
document shows,I only define one entity once: <!ENTITY sax "ddd">!
b. I already define the entity 'sax' in the internal DTD declaration at the start of 'a.xml', but, why
does error still occur when using the entity [sax2A:attr2="&sax;"] ?
All of above are my questions, I hunger for the feedback!
Thanks for all of you!
Jeffery Xu
May 27th, 2003
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]