2003-11-21 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
authorAtsushi Eno <atsushieno@gmail.com>
Fri, 21 Nov 2003 19:20:35 +0000 (19:20 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Fri, 21 Nov 2003 19:20:35 +0000 (19:20 -0000)
* XslAttribute.cs : Name verification.
* XslElement.cs : Name verification. Consider IsEmptyElement.
* XslCopy.cs : copy namespace nodes too.

svn path=/trunk/mcs/; revision=20322

mcs/class/System.XML/Mono.Xml.Xsl.Operations/ChangeLog
mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslAttribute.cs
mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslCopy.cs
mcs/class/System.XML/Mono.Xml.Xsl.Operations/XslElement.cs

index 6e33073f2d16da1e710807ac1cf74b8bfe144b66..8b3d57e42968e8f824960c05c51a42dcd73e1b55 100644 (file)
@@ -1,3 +1,9 @@
+2003-11-21 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
+
+       * XslAttribute.cs : Name verification.
+       * XslElement.cs : Name verification. Consider IsEmptyElement.
+       * XslCopy.cs : copy namespace nodes too.
+
 2003-11-09 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
 
        * XslAttribute.cs : namespace should be String.Empty if no specification
index 259b396d2aae77b3449900c7c402d1cdab78b5fb..6f50f99d8d33d7b2ba66a7ed72c616abe8b63c01 100644 (file)
@@ -98,6 +98,8 @@ namespace Mono.Xml.Xsl.Operations {
                        if (prefix == "xmlns")
                                prefix = String.Empty;  // Should not be allowed.
 
+                       XmlConvert.VerifyName (nm);
+
                        if (value == null)
                                p.Out.WriteAttributeString(prefix, nm, nmsp, "");
                        else {
index 8ecfa5ca190bbafe77ce5a78f1ab0662d387234c..9cf62d8e645181702e950f88e2ea6ee80a92a075 100644 (file)
@@ -49,12 +49,16 @@ namespace Mono.Xml.Xsl.Operations {
                                if (useAttributeSets != null)
                                        foreach (XmlQualifiedName s in useAttributeSets)
                                                p.ResolveAttributeSet (s).Evaluate (p);
+
+                               if (p.CurrentNode.MoveToFirstNamespace (XPathNamespaceScope.Local)) {
+                                       do {
+                                               p.Out.WriteNamespaceDecl (p.CurrentNode.LocalName, p.CurrentNode.Value);
+                                       } while (p.CurrentNode.MoveToNextNamespace (XPathNamespaceScope.Local));
+                                       p.CurrentNode.MoveToParent ();
+                               }
                        
                                if (children != null) children.Evaluate (p);
-                               if (p.CurrentNode.IsEmptyElement)
-                                       p.Out.WriteEndElement ();
-                               else
-                                       p.Out.WriteFullEndElement ();
+                               p.Out.WriteFullEndElement ();
                                break;
                        case XPathNodeType.Attribute:
                                p.Out.WriteAttributeString (p.CurrentNode.Prefix, p.CurrentNode.LocalName, p.CurrentNode.NamespaceURI, p.CurrentNode.Value);
index 9dc46f6f8a7acb0836be1fb113ae3051651d7ecb..5576e2ac151837cde91b866b7598c3c01c5ae73d 100644 (file)
@@ -64,7 +64,7 @@ namespace Mono.Xml.Xsl.Operations {
                {
                        string nm, nmsp, localName, prefix;
                        
-                       nm = calcName != null ? calcName : name.Evaluate (p);
+                       localName = nm = calcName != null ? calcName : name.Evaluate (p);
                        nmsp = calcNs != null ? calcNs : ns != null ? ns.Evaluate (p) : null;
                        prefix = calcPrefix != null ? calcPrefix : String.Empty;
 
@@ -85,7 +85,9 @@ namespace Mono.Xml.Xsl.Operations {
                                }
                        }
 
-                       p.Out.WriteStartElement (prefix, nm, nmsp);
+                       XmlConvert.VerifyName (nm);
+
+                       p.Out.WriteStartElement (prefix, localName, nmsp);
                        
                        p.TryStylesheetNamespaceOutput ();
                        if (useAttributeSets != null)
@@ -94,7 +96,10 @@ namespace Mono.Xml.Xsl.Operations {
 
                        if (value != null) value.Evaluate (p);
 
-                       p.Out.WriteFullEndElement ();
+                       if (isEmptyElement && useAttributeSets == null)
+                               p.Out.WriteEndElement ();
+                       else
+                               p.Out.WriteFullEndElement ();
                }
        }
 }