[xml] Questions about libxml2 SAX Interface!



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]