mmidy       00/10/03 13:12:32

  Modified:    java/src/org/apache/xalan/transformer ResultTreeHandler.java
  Log:
  Fix namespace processing. Make sure parents are processed first and that an 
element's namespace is ouput.
  
  Revision  Changes    Path
  1.15      +34 -22    
xml-xalan/java/src/org/apache/xalan/transformer/ResultTreeHandler.java
  
  Index: ResultTreeHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/ResultTreeHandler.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- ResultTreeHandler.java    2000/10/03 19:39:29     1.14
  +++ ResultTreeHandler.java    2000/10/03 20:12:31     1.15
  @@ -472,6 +472,12 @@
       m_nsSupport.pushContext();
       setPendingElementName (ns, localName, name);
       m_haveDocContent = true;
  +    if (ns != null && ns.length() > 0)
  +    { 
  +      int index;
  +      String prefix = (index = name.indexOf(":"))< 0 ? "" : 
name.substring(0, index);
  +      startPrefixMapping ( prefix, ns);
  +    }
     }
   
     /**
  @@ -489,6 +495,12 @@
       m_pendingAttributes.addAttributes(atts);
       setPendingElementName (ns, localName, name);
       m_haveDocContent = true;
  +    if (ns != null && ns.length() > 0)
  +    { 
  +      int index;
  +      String prefix = (index = name.indexOf(":"))< 0 ? "" : 
name.substring(0, index);
  +      startPrefixMapping ( prefix, ns);
  +    }
     }
   
     /**
  @@ -856,7 +868,7 @@
         String name;
         if(isDefault)
         {
  -        prefix = "xml";
  +        //prefix = "xml";
           name = "xmlns";
         }
         else
  @@ -882,33 +894,33 @@
       int type;
       // Vector nameValues = null;
       // Vector alreadyProcessedPrefixes = null;
  -    Node parent = src;
  -    while (parent != null
  -           && ((type = parent.getNodeType()) == Node.ELEMENT_NODE
  -               || (type == Node.ENTITY_REFERENCE_NODE)))
  -    {
  -      if (type == Node.ELEMENT_NODE)
  +    Node parent;
  +    if(((type = src.getNodeType()) == Node.ELEMENT_NODE
  +        || (type == Node.ENTITY_REFERENCE_NODE))
  +       && (parent = src.getParentNode()) != null)
  +    {
  +      processNSDecls(parent);
  +    }  
  +    if (type == Node.ELEMENT_NODE)
  +    {
  +      NamedNodeMap nnm = src.getAttributes();
  +      int nAttrs = nnm.getLength();
  +      for (int i = 0;  i < nAttrs;  i++)
         {
  -        NamedNodeMap nnm = parent.getAttributes();
  -        int nAttrs = nnm.getLength();
  -        for (int i = 0;  i < nAttrs;  i++)
  +        Node attr = nnm.item(i);
  +        String aname = attr.getNodeName();
  +        if (QName.isXMLNSDecl(aname))
           {
  -          Node attr = nnm.item(i);
  -          String aname = attr.getNodeName();
  -          if (QName.isXMLNSDecl(aname))
  +          String prefix = QName.getPrefixFromXMLNSDecl(aname);
  +          String desturi = getURI(prefix);
  +          String srcURI = attr.getNodeValue();
  +          if(!srcURI.equalsIgnoreCase(desturi))
             {
  -            String prefix = QName.getPrefixFromXMLNSDecl(aname);
  -            String desturi = getURI(prefix);
  -            String srcURI = attr.getNodeValue();
  -            if(!srcURI.equalsIgnoreCase(desturi))
  -            {
  -              this.startPrefixMapping(prefix, srcURI);
  -            }
  +            this.startPrefixMapping(prefix, srcURI);
             }
           }
         }
  -      parent = parent.getParentNode();
  -    }
  +    }      
     }
       
     /**
  
  
  

Reply via email to