get {
if (current.ParentNode != null && current.ParentNode.NodeType == XmlNodeType.Attribute)
return ((XmlAttribute) current.ParentNode).OwnerElement;
- return (current.NodeType == XmlNodeType.Attribute) ? ((XmlAttribute)current).OwnerElement : current;
+ else if (current.NodeType == XmlNodeType.Attribute)
+ return ((XmlAttribute) current).OwnerElement;
+ else
+ return current;
}
}
return entityReader.ReadState == ReadState.Interactive ?
entityReader.AttributeCount : 0;
- if (isEndElement || current == null || current.Attributes == null)
+ if (isEndElement || current == null)
return 0;
- return ownerElement.Attributes.Count;
+ XmlNode n = ownerElement;
+ return n.Attributes != null ? n.Attributes.Count : 0;
}
}
if (entityReader != null && entityReader.ReadState == ReadState.Interactive)
return entityReader.Depth + depth + entityReaderStack.Count + 1;
+ if (current == null)
+ return 0;
+ if (current.NodeType == XmlNodeType.Attribute)
+ return depth + 1;
+ if (current.ParentNode != null && current.ParentNode.NodeType == XmlNodeType.Attribute)
+ return depth + 2;
+
return depth;
}
}
if (isEndElement || current == null)
return false;
- if (current.Attributes == null ||
- current.Attributes.Count == 0)
+ // MS BUG: inconsistent return value between XmlTextReader and XmlNodeReader.
+ // As for attribute and its descendants, XmlReader returns element's HasAttributes.
+ XmlNode n = ownerElement;
+
+ if (n.Attributes == null ||
+ n.Attributes.Count == 0)
return false;
else
return true;
if (current == null)
return false;
- if (current.NodeType == XmlNodeType.Element ||
- current.NodeType == XmlNodeType.EntityReference ||
- current.NodeType == XmlNodeType.Document ||
- current.NodeType == XmlNodeType.DocumentFragment ||
- current.NodeType == XmlNodeType.Notation ||
- current.NodeType == XmlNodeType.EndElement ||
- current.NodeType == XmlNodeType.EndEntity)
+ switch (current.NodeType) {
+ case XmlNodeType.Element:
+ case XmlNodeType.EntityReference:
+ case XmlNodeType.Document:
+ case XmlNodeType.DocumentFragment:
+ case XmlNodeType.Notation:
+ case XmlNodeType.EndElement:
+ case XmlNodeType.EndEntity:
return false;
- else
+ default:
return true;
+ }
}
}
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;
}
}
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)
if (current == null)
return false;
- if (current.NodeType == XmlNodeType.Attribute) {
- current = ((XmlAttribute) current).OwnerElement;
+ XmlNode n = ownerElement;
+ if (current != n) {
+// if (current.NodeType == XmlNodeType.Attribute) {
+ current = n;//((XmlAttribute) current).OwnerElement;
return true;
} else
return false;
}
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;
return false;
}
+#if NET_1_0
// Its traversal behavior is almost same as Read().
public override string ReadInnerXml ()
{
return String.Empty;
}
}
+#endif
public override string ReadString ()
{
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.SkipTextDeclaration ();
}
public override void Skip ()