2003-08-21 Ben Maurer <bmaurer@users.sourceforge.net>
authorBen Maurer <benm@mono-cvs.ximian.com>
Thu, 21 Aug 2003 16:59:10 +0000 (16:59 -0000)
committerBen Maurer <benm@mono-cvs.ximian.com>
Thu, 21 Aug 2003 16:59:10 +0000 (16:59 -0000)
* Compiler.cs, XsltCompiledContext.cs, XslTransformProcessorcs:
Fix up namespace handeling

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

mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog
mcs/class/System.XML/Mono.Xml.Xsl/Compiler.cs
mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs
mcs/class/System.XML/Mono.Xml.Xsl/XsltCompiledContext.cs

index d0dd6f1723c290531930ec31d5a9db9f8223106e..15860a1333b1a663193f90b7cc0759405a5baa75 100644 (file)
@@ -1,3 +1,8 @@
+2003-08-21 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * Compiler.cs, XsltCompiledContext.cs, XslTransformProcessorcs:
+       Fix up namespace handeling
+
 2003-08-20 Ben Maurer  <bmaurer@users.sourceforge.net>
 
        * Compiler.cs, XslStylesheet.cs, XsltCompiledContext.cs: Stubs for
index 2ee876a253ebc6e01041bc2dbab286e492ebf01c..50b0889f1885e25dc655a54c587a1d366824ed49 100644 (file)
@@ -456,7 +456,6 @@ namespace Mono.Xml.Xsl {
                                        if (v.IsEvaluated (p))
                                                return v;
                                }
-                       
                        return null;
                }
        }
@@ -556,7 +555,12 @@ namespace Mono.Xml.Xsl {
                public void AddExpression (XPathExpression e, Compiler c)
                {
                        exprToVarCtx [e] = c.CurrentVariableScope;
-                       exprToDocument [e] = c.Input.Clone ();
+                       
+                       XPathNavigator nsScope = c.Input.Clone ();
+                       if (nsScope.NodeType == XPathNodeType.Attribute)
+                               nsScope.MoveToParent ();
+                       
+                       exprToDocument [e] = nsScope;
                }
                
                public void AddSort (XPathExpression e, Sort s)
@@ -590,7 +594,7 @@ namespace Mono.Xml.Xsl {
                {
                        int colon = name.IndexOf (':');
                        if (colon > 0)
-                               return new QName (name.Substring (colon, name.Length - colon), current.GetNamespace (name.Substring (0, colon)));
+                               return new QName (name.Substring (colon+ 1), current.GetNamespace (name.Substring (0, colon)));
                        else if (colon < 0)
                                // Default namespace is not used for unprefixed names.
                                return new QName (name, "");
@@ -602,7 +606,7 @@ namespace Mono.Xml.Xsl {
                {
                        int colon = name.IndexOf (':');
                        if (colon > 0)
-                               return new QName (name.Substring (colon, name.Length - colon), ctx.LookupNamespace (name.Substring (0, colon)));
+                               return new QName (name.Substring (colon + 1), ctx.LookupNamespace (name.Substring (0, colon)));
                        else if (colon < 0)
                                // Default namespace is not used for unprefixed names.
                                return new QName (name, "");
index adaffa5101185964e5f017950cc8bc5e180a56fb..d57209f4ae8a8386bed34574904b4a3aae0e82cc 100644 (file)
@@ -44,13 +44,14 @@ namespace Mono.Xml.Xsl {
 
                public void Process (XPathNavigator root, Outputter outputtter, XsltArgumentList args, XmlResolver resolver)
                {
-                       foreach (XslGlobalVariable v in CompiledStyle.Variables.Values) {
-                               if (v is XslGlobalParam) {
-                                       object p = args.GetParam(v.Name.Name, v.Name.Namespace);
-                                       if (p != null)
-                                               ((XslGlobalParam)v).Override (this, p);
+                       if (args != null)
+                               foreach (XslGlobalVariable v in CompiledStyle.Variables.Values) {
+                                       if (v is XslGlobalParam) {
+                                               object p = args.GetParam(v.Name.Name, v.Name.Namespace);
+                                               if (p != null)
+                                                       ((XslGlobalParam)v).Override (this, p);
+                                       }
                                }
-                       }
                        
                        this.args = args;
                        this.root = root;
index 68e91da0dd4d526969a933e9ce476324bfd82f74..3cfe9d3872ebdbcc29a434daab843a30994e6020 100644 (file)
@@ -153,13 +153,15 @@ namespace Mono.Xml.Xsl {
 
                public override System.Xml.Xsl.IXsltContextVariable ResolveVariable(string prefix, string name)
                {
+                       QName varName = new QName (name, LookupNamespace (prefix));
+                       
                        if (v != null) {
-                               XslGeneralVariable var = v.Resolve (p, new QName (name));
+                               XslGeneralVariable var = v.Resolve (p, varName);
        
                                if (var != null)
                                        return var;
                        }
-                       return p.CompiledStyle.ResolveVariable (new QName (name));
+                       return p.CompiledStyle.ResolveVariable (varName);
                }
 
                public override int CompareDocument (string baseUri, string nextBaseUri) { throw new NotImplementedException (); }