Elisha, Looks like yo're using the code from the SCMPrint sample program. This is what u can do; when you are in the XSParticle::TERM_ELEMENT if block (process element section), you can further check if the element is a complex type and recursively call ProcessParticle function again:
XSTypeDefinition *xsTypeDef = xsParticle->getElementTerm()->getTypeDefinition(); if (xsTypeDef->getTypeCategory() == XSTypeDefinition::COMPLEX_TYPE) { XSComplexTypeDefinition *xsComplexTypeDef = (XSComplexTypeDefinition *)xsParticle->getElementTerm()->getTypeDefinition(); ProcessParticle(xsComplexTypeDef->getParticle()); } I am new to Xerces, so there might be a better solution. Nonetheless, this one works. Cheers, Matt. --- Elisha Berns <[EMAIL PROTECTED]> wrote: > Hi, > > Though I have yet to get any response to my previous > email this post is > to get clarification, at least theoretically, how > the XSParticle class > needs to handle references to both 'group' and > 'attributeGroup' inside > of complexType declarations... > > Currently when parsing an XSCompleTypeDefinition > object the > getParticles() method returns an array of XSParticle > objects. These > objects can then be queried whether they are > XSElementDeclarations or > XSModelGroup by calling getTermType(). If it is an > XSModelGroup, it can > be queried further to provide its COMPOSITOR_TYPE, > which may be > COMPOSITOR_SEQUENCE, COMPOSITOR_CHOICE or > COMPOSITOR_ALL. But if it is > a *named model group* the XSModelGroup interface > appears to not provide > any information. Nor does the XSParticle interface > provide any type > information for the *named model group* referenced. > > In light of this it would appear that this is an > omission on the part of > (at least) these two interfaces: XSParticle and > XSModelGroup. Shouldn't > XSParticle have a constant for a named model group > (i.e. > XSParticle::TERM_NAMED_MODELGROUP) that lets you > know that the particle > is a reference to a named model group. And then > XSModelGroup can > provide the type information for that named model > group when calling: > > XSModelGroup* pMG = pParticle->getModelGroupTerm(); > pMG->getTypeDeclaration(); > > which will then give its namespace and name, etc.? > > Currently, besides things not working this way, > there is a certain > weirdness to how they do work: if there is a named > model group > referenced inside the complexType then recursively > fetching the list of > particles will fetch all the elements from the > referenced named model > group, even though none of those elements are > particles inside the > complexType. For example: > > ProcessParticle(XSParticle* p) > { > if ( term_type == XSParticle:TERM_ELEMENT ) > { > // process element > } > else if ( term_type == XSParticle::TERM_MODELGROUP > ) > { > XSModelGroup* pMG = > pParticle->getModelGroupTerm(); > if ( pMG == 0 ) > return; > > XSParticleList* pPL = pMG->getParticles(); > if ( pPL == 0 ) > return; > > unsigned int nSize = pPL->size(); > for ( unsigned int i = 0; i < nSize; i++ ) > { > ProcessParticle( pPL->elementAt(i) ); > } > } > } > > So what's the design rationale here? Is this really > the way it's > supposed to work? Frankly, it seems that this > breaks the design > paradigm of other PSVI classes because for all other > types referenced > from an enclosing type, such as an > XSElementDeclaration inside an > XSComplexTypeDefinition, you need to first get the > object to then get > its type definition, name, etc. But here you don't > really, and can't > get the XSModelGroup object for the named model > group, but you can still > get its contained elements. > > So first what's theoretically correct here, and > second doesn't this need > to be fixed? > > Elisha Berns > [EMAIL PROTECTED] > tel. (310) 556 - 8332 > fax (310) 556 - 2839 > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]