Hello,

The number of elements message is not printed, and there are no
non-ASCII characters. 

-----Original Message-----
From: ext Alberto Massari [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, January 30, 2008 5:10 PM
To: [email protected]
Subject: Re: Problems in parsing; values not printed on the screen.

It's hard to say just by looking at this fragment of code. Do you see
the total "number of elements=XX" message? How many elements did the
code find? Does your fragment contain non-ASCII characters that
XMLString::transcode could fail to translate?

Alberto

Kanagal, Rahul (NSN - IN/India - MiniMD) wrote:
>
> Hello,
>
> I am trying to write a decode function(using DOM parser) to decode XML

> content in a buffer and print the values of the element names,values 
> and their attributes.
>
> The code is just a modification of the sample code from apache which 
> parses XML content from a file. The code works just fine for file 
> parse, but the modified code for parsing buffer contents is just not 
> printing the values on the screen. I am a new developer and I am not 
> able to find out what the problem is.Can somebody please help?
>
> Thanks,
> Rahul.
>
> Here is a sample of the code:
>
>
> //
> ----------------------------------------------------------------------
> -----
>
> //  Includes
> //
> ----------------------------------------------------------------------
> -----
>
> #include <xercesc/util/PlatformUtils.hpp> #include 
> <xercesc/parsers/AbstractDOMParser.hpp>
> #include <xercesc/dom/DOMImplementation.hpp>
> #include <xercesc/dom/DOMImplementationLS.hpp>
> #include <xercesc/dom/DOMImplementationRegistry.hpp>
> #include <xercesc/dom/DOMBuilder.hpp>
> #include <xercesc/dom/DOMException.hpp> #include 
> <xercesc/dom/DOMDocument.hpp> #include <xercesc/dom/DOMNodeList.hpp> 
> #include <xercesc/dom/DOMError.hpp> #include 
> <xercesc/dom/DOMLocator.hpp> #include 
> <xercesc/dom/DOMNamedNodeMap.hpp> #include <xercesc/dom/DOMAttr.hpp>
>
> #include <xercesc/framework/Wrapper4DOMInputSource.hpp>
> #include <xercesc/framework/Wrapper4InputSource.hpp>
> #include <xercesc/framework/MemBufInputSource.hpp>
>
>
> #include "DOMCount.h"
> #include <string.h>
> #include <stdlib.h>
> #include <iostream>
> #if defined(XERCES_NEW_IOSTREAMS)
> #include <fstream>
> #else
> #include <fstream.h>
> #endif
> #include"DOMDecode.hpp"
> using namespace std;
> //
> ----------------------------------------------------------------------
> -----
>
> //  This is a simple program which invokes the DOMParser to build a 
> DOM //  tree for the specified input file. It then walks the tree and 
> prints out the //  elements and their values.
> //
> ----------------------------------------------------------------------
> -----
>
>
> static int decodeChildElements(DOMNode *n) {
>     DOMNode *child;
>     int count = 0;
>     if (n) {
>         if (n->getNodeType() == DOMNode::ELEMENT_NODE)
>                 {          
>                 char *name = 
> XMLString::transcode(n->getNodeName());               
>                 XERCES_STD_QUALIFIER cout <<"Element Name : "<< name 
> << XERCES_STD_QUALIFIER endl;
>                
>                 
>                  name = 
> XMLString::transcode(n->getFirstChild()->getNodeValue());            
>                XERCES_STD_QUALIFIER cout <<"Element Value : "<< name 
> << XERCES_STD_QUALIFIER endl;                        
>
>                         
>                
>                 XMLString::release(&name);
>                        
>                 if(n->hasAttributes()) {
>                     // get all the attributes of the node
>                     DOMNamedNodeMap *pAttributes = n->getAttributes();
>                       int nSize = pAttributes->getLength();
>                     XERCES_STD_QUALIFIER cout <<"\tAttributes" << 
> XERCES_STD_QUALIFIER endl;
>                     XERCES_STD_QUALIFIER cout <<"\t----------" << 
> XERCES_STD_QUALIFIER endl;
>                     for(int i=0;i<nSize;++i) {
>                         DOMAttr *pAttributeNode = (DOMAttr*)
> pAttributes->item(i);
>                         // get attribute name
>                         char *name =
> XMLString::transcode(pAttributeNode->getName());
>                        
>                         XERCES_STD_QUALIFIER cout << "\t" << name <<
"=";
>                         XMLString::release(&name);
>                        
>                         // get attribute type
>                         name =
> XMLString::transcode(pAttributeNode->getValue());
>                         XERCES_STD_QUALIFIER cout << name << 
> XERCES_STD_QUALIFIER endl;
>                         XMLString::release(&name);
>                     }
>                 }
>                         ++count;
>                 }
>         for (child = n->getFirstChild(); child != 0;
> child=child->getNextSibling())
>             count += decodeChildElements(child);
>     }
>     return count;
> }
>
>
> int decodeXml(const char *buf)
> {        
>     static const char* bufId = "XML content";
>    
>     AbstractDOMParser::ValSchemes valScheme = 
> AbstractDOMParser::Val_Auto;
>     bool                       doNamespaces       = false;
>     bool                       doSchema           = false;
>     bool                       schemaFullChecking = false;
>     bool                       doList = false;
>     bool                       errorOccurred = false;
>     bool                       recognizeNEL = false;  
>     char                       localeStr[64];
>     memset(localeStr, 0, sizeof localeStr);
>  
>     // Initialize the XML4C system
>     try
>     { 
>         if (strlen(localeStr))
>         {
>             XMLPlatformUtils::Initialize(localeStr);
>         }
>         else
>         {
>             XMLPlatformUtils::Initialize();
>         }
>
>         if (recognizeNEL)
>         {
>             XMLPlatformUtils::recognizeNEL(recognizeNEL);
>         }
>     }
>
>     catch (const XMLException& toCatch)
>     {
>          XERCES_STD_QUALIFIER cerr << "Error during initialization!
:\n"
>               << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER
endl;
>          return 1;
>     }
>
>     // Instantiate the DOM parser.
>     static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
>     DOMImplementation *impl = 
> DOMImplementationRegistry::getDOMImplementation(gLS);
>     DOMBuilder        *parser = 
>
((DOMImplementationLS*)impl)->createDOMBuilder(DOMImplementationLS::MODE
_SYNCHRONOUS, 
> 0);
>
>     parser->setFeature(XMLUni::fgDOMNamespaces, doNamespaces);
>     parser->setFeature(XMLUni::fgXercesSchema, doSchema);
>     parser->setFeature(XMLUni::fgXercesSchemaFullChecking, 
> schemaFullChecking);
>
>     if (valScheme == AbstractDOMParser::Val_Auto)
>     {
>         parser->setFeature(XMLUni::fgDOMValidateIfSchema, true);
>     }
>     else if (valScheme == AbstractDOMParser::Val_Never)
>     {
>         parser->setFeature(XMLUni::fgDOMValidation, false);
>     }
>     else if (valScheme == AbstractDOMParser::Val_Always)
>     {
>         parser->setFeature(XMLUni::fgDOMValidation, true);
>     }
>
>     // enable datatype normalization - default is off
>     parser->setFeature(XMLUni::fgDOMDatatypeNormalization, true);
>
>     // And create our error handler and install it
>     DOMCountErrorHandler errorHandler;
>     parser->setErrorHandler(&errorHandler);
>    
>     bool more = true;
>     XERCES_STD_QUALIFIER ifstream fin;
>
>        //......creating a MemBufInputSource
>        * MemBufInputSource* memBufIS = new MemBufInputSource((const 
> XMLByte*)buf, strlen(buf), bufId, false);*
> *       Wrapper4InputSource *wrapper=new 
> Wrapper4InputSource(memBufIS,false);*
>       
>     while (more)
>     {               
>          more = false;    
>
>         //reset error count first
>         errorHandler.resetErrors();
>
>         XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc = 0;
>
>        try
>         {
>             // reset document pool
>             parser->resetDocumentPool();            
>             * parser->parse(*wrapper);*
>
>         }
>
>         catch (const XMLException& toCatch)
>         {
>             XERCES_STD_QUALIFIER cerr << "\nError during parsing: '" 
> << buf << "'\n"
>                  << "Exception message is:  \n"
>                  << StrX(toCatch.getMessage()) << "\n" << 
> XERCES_STD_QUALIFIER endl;
>             errorOccurred = true;
>             continue;
>         }
>         catch (const DOMException& toCatch)
>         {
>             const unsigned int maxChars = 2047;
>             XMLCh errText[maxChars + 1];
>
>             XERCES_STD_QUALIFIER cerr << "\nDOM Error during parsing: 
> '" << buf<< "'\n"
>                  << "DOMException code is:  " << toCatch.code << 
> XERCES_STD_QUALIFIER endl;
>
>             if (DOMImplementation::loadDOMExceptionMsg(toCatch.code, 
> errText, maxChars))
>                  XERCES_STD_QUALIFIER cerr << "Message is: " << 
> StrX(errText) << XERCES_STD_QUALIFIER endl;
>
>             errorOccurred = true;
>             continue;
>         }
>         catch (...)
>         {
>             XERCES_STD_QUALIFIER cerr << "\nUnexpected exception 
> during parsing: '" << buf << "'\n";
>             errorOccurred = true;
>             continue;
>         }              
>        
>         if (errorHandler.getSawErrors())
>         {
>             XERCES_STD_QUALIFIER cout << "\nErrors occurred, no output

> available\n" << XERCES_STD_QUALIFIER endl;
>             errorOccurred = true;
>         }              
>          else
>         {           
>             if (doc) {           
>                  
>                 int elementCount = 
> decodeChildElements((DOMNode*)doc->getDocumentElement());
>                    cout<<"total number of
elements="<<elementCount<<endl;
>                
>                 }
>
>             }
>           
>         }   
>
>     //
>     //  Delete the parser itself.  Must be done prior to calling 
> Terminate, below.
>     //
>     parser->release();
>
>     // And call the termination method
>     XMLPlatformUtils::Terminate();
>
>     if (doList)
>         fin.close();
>
>     if (errorOccurred)
>         return 4;
>     else
>         return 0;
> }
>
>
>



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