You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2004/02/12 20:30:49 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/trax DOM2TO.java

santiagopg    2004/02/12 11:30:48

  Modified:    java/src/org/apache/xalan/xsltc/trax DOM2TO.java
  Log:
  Committing patch by Bhakti for XSLTC. If attributes are created without an explicit prefix, then NamespaceMappings.generateNextPrefix will be called to generate a prefix. Also if elements are created using createElementNS(null,localname) then they will be serialized properly without being in default namespace.
  
  Revision  Changes    Path
  1.7       +28 -6     xml-xalan/java/src/org/apache/xalan/xsltc/trax/DOM2TO.java
  
  Index: DOM2TO.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/DOM2TO.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- DOM2TO.java	1 Apr 2003 21:19:06 -0000	1.6
  +++ DOM2TO.java	12 Feb 2004 19:30:48 -0000	1.7
  @@ -64,7 +64,6 @@
   
   import java.io.IOException;
   
  -
   import org.w3c.dom.NamedNodeMap;
   import org.w3c.dom.Node;
   import org.apache.xml.serializer.SerializationHandler;
  @@ -78,6 +77,7 @@
   import org.xml.sax.SAXNotRecognizedException;
   import org.xml.sax.SAXNotSupportedException;
   import org.xml.sax.XMLReader;
  +import org.apache.xml.serializer.NamespaceMappings;
   
   public class DOM2TO implements XMLReader, Locator {
   
  @@ -176,11 +176,13 @@
   	    // Generate SAX event to start element
   	    final String qname = node.getNodeName();
   	    _handler.startElement(null, null, qname);
  +
   	    String prefix;
   	    final NamedNodeMap map = node.getAttributes();
   	    final int length = map.getLength();
   
   	    // Process all other attributes
  +            NamespaceMappings nm = new NamespaceMappings();
   	    for (int i = 0; i < length; i++) {
   		int colon;
   		final Node attr = map.item(i);
  @@ -198,23 +200,43 @@
   		    // Uri may be implicitly declared
   		    if (uriAttr != null && !uriAttr.equals(EMPTYSTRING) ) {	
   			colon = qnameAttr.lastIndexOf(':');
  +                           
  +                        // Fix for bug 26319
  +                        // For attributes not given an prefix explictly
  +                        // but having a namespace uri we need
  +                        // to explicitly generate the prefix
  +                        String newPrefix = nm.lookupPrefix(uriAttr);
  +                        if (newPrefix == null) 
  +                            newPrefix = nm.generateNextPrefix();
   			prefix = (colon > 0) ? qnameAttr.substring(0, colon) 
  -			    : EMPTYSTRING;
  +			    : newPrefix;
   			_handler.namespaceAfterStartElement(prefix, uriAttr);
  +		        _handler.addAttribute((prefix + ":" + qnameAttr)
  +                            , attr.getNodeValue());
   		    }
  -		    _handler.addAttribute(qnameAttr, attr.getNodeValue());
  -		}
  +                }
   	    }
   
   	    // Now element namespace and children
   	    final String uri = node.getNamespaceURI();
  +            final String localName = node.getLocalName();
   
   	    // Uri may be implicitly declared
   	    if (uri != null) {	
   		final int colon = qname.lastIndexOf(':');
   		prefix = (colon > 0) ? qname.substring(0, colon) : EMPTYSTRING;
   		_handler.namespaceAfterStartElement(prefix, uri);
  -	    }
  +	    }else {
  +                  // Fix for bug 26319
  +                  // If an element foo is created using
  +                  // createElementNS(null,locName)
  +                  // then the  element should be serialized
  +                  // <foo xmlns=" "/> 
  +                  if (uri == null  && localName != null) {
  + 		     prefix = EMPTYSTRING;
  +		     _handler.namespaceAfterStartElement(prefix, EMPTYSTRING);
  +                 }
  +            }
   
   	    // Traverse all child nodes of the element (if any)
   	    next = node.getFirstChild();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org