morten      01/08/22 02:21:30

  Modified:    java/src/org/apache/xalan/xsltc/compiler XslElement.java
  Log:
  Fix for a problem with some combinations of <xsl:element> and namespace
  aliasing. The output lacked the necessary namespace definitions when an
  element created with <xsl:element> was given a qname with a prefix that
  was mapped to some other prefix.
  PR:           n/a
  Obtained from:        n/a
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.11      +16 -15    
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslElement.java
  
  Index: XslElement.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslElement.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XslElement.java   2001/08/14 10:25:41     1.10
  +++ XslElement.java   2001/08/22 09:21:29     1.11
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: XslElement.java,v 1.10 2001/08/14 10:25:41 morten Exp $
  + * @(#)$Id: XslElement.java,v 1.11 2001/08/22 09:21:29 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -76,7 +76,7 @@
   
       private AttributeValue _name; // name treated as AVT (7.1.3)
       private AttributeValueTemplate _namespace = null;
  -    private String _namespacePrefix;
  +    private String  _prefix;
       private boolean _ignore = false;
   
       /**
  @@ -104,9 +104,9 @@
   
        // Get the "name" attribute of the <xsl:element> element
        String name = getAttribute("name");
  -     if ((name == null) || (name.equals(Constants.EMPTYSTRING))) {
  +     if ((name == null) || (name.equals(EMPTYSTRING))) {
            final ErrorMsg msg = new ErrorMsg("You can't call an element \"\"");
  -         parser.reportError(Constants.WARNING, msg);
  +         parser.reportError(WARNING, msg);
            _ignore = true; // Ignore the element if the QName is invalid
            return;
        }
  @@ -120,38 +120,39 @@
        String namespace = getAttribute("namespace");
   
        // Then try to get it from the "name" attribute QName prefix
  -     if (namespace == null) {
  +     if ((namespace == null) || (namespace.equals(EMPTYSTRING))) {
   
            // We are supposed to use the default namespace URI if the QName
            // from the "name" attribute is not prefixed, so check that first
  -         if (prefix == null) prefix = Constants.EMPTYSTRING;
  +         if (prefix == null) prefix = EMPTYSTRING;
            // Then look up the URI that is in scope for the prefix
            namespace = lookupNamespace(prefix); 
   
            // Signal error if the prefix does not map to any namespace URI 
            if (namespace == null) {
                final ErrorMsg msg = new ErrorMsg(ErrorMsg.NSPUNDEF_ERR,prefix);
  -             parser.reportError(Constants.WARNING, msg);
  +             parser.reportError(WARNING, msg);
                parseChildren(parser);
                _ignore = true; // Ignore the element if prefix is undeclared
                return;
            }
  +         _namespace = new AttributeValueTemplate(namespace, parser);
  +         _prefix = prefix;
        }
        // Check if this element belongs in a specific namespace
  -     else if (namespace != Constants.EMPTYSTRING) {
  +     else if (namespace != EMPTYSTRING) {
            // Get the namespace requested by the xsl:element
            _namespace = new AttributeValueTemplate(namespace, parser);
            // Get the current prefix for that namespace (if any)
  -         _namespacePrefix = lookupPrefix(namespace);
  +         _prefix = lookupPrefix(namespace);
            // Is it the default namespace?
  -         if ((_namespacePrefix = prefix) == null)
  -             _namespacePrefix = Constants.EMPTYSTRING;
  +         if ((_prefix = prefix) == null) _prefix = EMPTYSTRING;
   
            // Construct final element QName
  -         if (_namespacePrefix == Constants.EMPTYSTRING)
  +         if (_prefix == EMPTYSTRING)
                name = qname.getLocalPart();
            else
  -             name = _namespacePrefix+":"+qname.getLocalPart();
  +             name = _prefix+":"+qname.getLocalPart();
        }
   
        _name = AttributeValue.create(this, name, parser);
  @@ -160,7 +161,7 @@
        if ((_name instanceof SimpleAttributeValue) &&
            (local.indexOf(' ') > -1)) {
            final String errmsg = "You can't call an element \""+local+"\"";
  -         parser.reportError(Constants.WARNING, new ErrorMsg(errmsg));
  +         parser.reportError(WARNING, new ErrorMsg(errmsg));
            parseChildren(parser);
            _ignore = true; // Ignore the element if the local part is invalid
            return;
  @@ -210,7 +211,7 @@
            if (_namespace != null) {
                // public void attribute(final String name, final String value)
                il.append(methodGen.loadHandler());
  -             il.append(new PUSH(cpg,_namespacePrefix));
  +             il.append(new PUSH(cpg, _prefix));
                _namespace.translate(classGen,methodGen);
                il.append(methodGen.namespace());
            }
  
  
  

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

Reply via email to