Hello,

I am iterating through an XML node with a many children.  For each child, I 
have to store it into an associated stuct. I am looking for a quicker way to do 
this. So far, I've converted each child's text content from string to the 
correct type defined in the struct. The struct members are of a variety of 
types so I think that I have to write the code to determine what type it has to 
be converted, as I did below.

Is there a better way to do this? The way I am going about it, will result in 
more than a thousand lines. If I validated against a schema, would I have to do 
the conversion before  I stored it into the struct? Can anyone provide a better 
solution for me? Thanks!

I have an XML document with the following format.

<TRACK>
        <PARM>
                <element1>1.2345e-163</element1>
                <element2>9</element2>
                <element3>some text</element4?
                etc...
        </PARM>
</TRACK>

I need to take the element text content and store it in a  struct:

struct a_struct
{
        int     element1;
        double  element2;
        string  element3;
        etc...
};

I am parsing the XML with the following:

a_struct struct;
DOMElement* = doc->getDocumentElement();
DOMDOcument* doc = parser->getDocumentElement();
DOMXPathNXResolver* resolver = doc->createNSResolver(element);
DOMXPathResult* result = doc->evaluate(XMLString::transcode("//TRACK/PARMS/*), 
element,
        resolver, DOMXpathResult::ORDERED_NODE_SNAPSHOT_TYPE, NULL);

XMLSize_t len = result->getSnapshotLength();
DOMNode* node = result->getNodeValue;
char* name = XMLString::transcode(node->getNodeName());
string nodename = name;
DOMText* textnode (static_cast<DOMText*> (node->getFirstChild());

if ( textnode != NULL )
{
        char* content = XMLString::transcode(textnode->getData());
        string strcontent;
        strcontent += content;
//
//I would like to avoid having to do the following for each child. There are 
more that 300 child nodes.
//

        if ( nodename == "element2" )
        {
                struct.element2 = atof(strcontent.c_str());
        }

        XMLSting::release(&content);
        XMLString::release(&name);
}

result->release();
resolver->release();
doc->release();
delete parser;
SMLPlatformUtils::Terminate();



Raymond



Reply via email to