*** empty log message ***
[mono.git] / mcs / class / System.XML / System.Xml / XmlNodeReader.cs
index 60096e15e156a9040778ed878ab5b0deb98c30e2..f77a2875e10388020c5e6398e194fb7aa2464d31 100755 (executable)
@@ -276,7 +276,10 @@ namespace System.Xml
                                if (current == null)
                                        return String.Empty;
 
-                               return current.Prefix;
+                               if (current.NodeType == XmlNodeType.Attribute)
+                                       return current.Prefix != String.Empty ? current.Prefix : null;
+                               else
+                                       return current.Prefix;
                        }
                }
 
@@ -476,6 +479,17 @@ namespace System.Xml
                        return null;
                }
 
+               internal XmlParserContext GetInternalParserContext ()
+               {
+                       if (entityReader != null)
+                               return entityReader.GetInternalParserContext ();
+                       else
+                               return new XmlParserContext (document.NameTable,
+                                       current.ConstructNamespaceManager (),
+                                       document.DocumentType != null ? document.DocumentType.DTD : null,
+                                       current.BaseURI, XmlLang, XmlSpace, Encoding.Unicode);
+               }
+
                public override string LookupNamespace (string prefix)
                {
                        if (entityReader != null && entityReader.ReadState != ReadState.Initial)
@@ -770,8 +784,10 @@ namespace System.Xml
                        }
 
                        if (current.NodeType == XmlNodeType.Attribute) {
+                               if (current.FirstChild == null)
+                                       return false;
                                current = current.FirstChild;
-                               return current != null;
+                               return true;
                        } else if (current.ParentNode.NodeType == XmlNodeType.Attribute) {
                                if (current.NextSibling == null)
                                        return false;
@@ -781,7 +797,7 @@ namespace System.Xml
                                return false;
                }
 
-#if USE_VERSION_1_0
+#if NET_1_0
                // Its traversal behavior is almost same as Read().
                public override string ReadInnerXml ()
                {
@@ -889,10 +905,12 @@ namespace System.Xml
                        if (ctx == null) {
                                ctx = new XmlParserContext (document.NameTable,
                                        current.ConstructNamespaceManager (),
-                                       document.DocumentType.DTD,
+                                       document.DocumentType != null ? document.DocumentType.DTD : null,
                                        BaseURI, XmlLang, XmlSpace, Encoding.Unicode);
                        }
                        entityReader = new XmlTextReader (replacementText, xmlReaderNodeType, ctx);
+                       entityReader.XmlResolver = document.Resolver;
+                       entityReader.MaybeTextDecl = true;
                }
 
                public override void Skip ()