sandygao    2003/02/11 11:16:25

  Modified:    java/src/org/apache/xerces/impl/xs/traversers
                        XSDElementTraverser.java
  Log:
  Fixing a schema traversal: while deferring the traversal of local elements,
  we need to check the minOccurs value to make sure "emptiable particle"
  works fine.
  
  Revision  Changes    Path
  1.22      +20 -1     
xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
  
  Index: XSDElementTraverser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- XSDElementTraverser.java  21 Jan 2003 17:54:35 -0000      1.21
  +++ XSDElementTraverser.java  11 Feb 2003 19:16:25 -0000      1.22
  @@ -72,6 +72,7 @@
   import org.apache.xerces.util.SymbolTable;
   import org.apache.xerces.xni.QName;
   import org.w3c.dom.Element;
  +import org.w3c.dom.Attr;
   
   /**
    * The element declaration schema component traverser.
  @@ -138,6 +139,21 @@
               particle = new XSParticleDecl();
           }
           if(fDeferTraversingLocalElements) {
  +            // The only thing we care about now is whether this element has
  +            // minOccurs=0. This affects (if the element appears in a complex
  +            // type) whether a type has emptiable content.
  +            particle.fType = XSParticleDecl.PARTICLE_ELEMENT;
  +            Attr attr = elmDecl.getAttributeNode(SchemaSymbols.ATT_MINOCCURS);
  +            if (attr != null) {
  +                String min = attr.getValue();
  +                try {
  +                    int m = Integer.parseInt(min.trim());
  +                    if (m >= 0)
  +                        particle.fMinOccurs = m;
  +                }
  +                catch (NumberFormatException ex) {
  +                }
  +            }
               fSchemaHandler.fillInLocalElemInfo(elmDecl, schemaDoc, allContextFlags, 
enclosingCT, particle);
           } else {
               traverseLocal(particle, elmDecl, schemaDoc, grammar, allContextFlags, 
enclosingCT);
  @@ -198,6 +214,9 @@
           if (element != null) {
               particle.fType = XSParticleDecl.PARTICLE_ELEMENT;
               particle.fValue = element;
  +        }
  +        else {
  +            particle.fType = XSParticleDecl.PARTICLE_EMPTY;
           }
           Long defaultVals = (Long)attrValues[XSAttributeChecker.ATTIDX_FROMDEFAULT];
           checkOccurrences(particle, SchemaSymbols.ELT_ELEMENT,
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to