{\r
#region Constructors\r
\r
- [MonoTODO]
internal XmlDocumentNavigator(XmlNode node)\r
{\r
this.node = node;\r
+ this.document = node.NodeType == XmlNodeType.Document ?\r
+ node as XmlDocument : node.OwnerDocument;\r
}\r
\r
#endregion\r
#region Fields\r
\r
private XmlNode node;\r
+ private XmlDocument document;\r
private IEnumerator attributesEnumerator;\r
\r
#endregion\r
public override XmlNameTable NameTable {
get {
- return node.OwnerDocument.NameTable;
+ return document.NameTable;
}
}
{
XmlDocumentNavigator otherDocumentNavigator = other as XmlDocumentNavigator;
if (otherDocumentNavigator != null) {
- if (node.OwnerDocument == otherDocumentNavigator.node.OwnerDocument) {
+ if (document == otherDocumentNavigator.document) {
node = otherDocumentNavigator.node;
return true;
}
public override bool MoveToFirstChild ()
{
if (HasChildren) {
- node = (NodeType == XPathNodeType.Root) ?
- ((XmlDocument) node).DocumentElement :
- node.FirstChild;
+ if (node == document) {
+ XmlNode n = node.FirstChild;
+ if (n == null)
+ return false;
+ bool loop = true;
+ do {
+ switch (node.NodeType) {
+ case XmlNodeType.XmlDeclaration:
+ case XmlNodeType.DocumentType:
+ n = node.NextSibling;
+ if (n == null)
+ return false;
+ break;
+ default:
+ loop = false;
+ break;
+ }
+ } while (loop);
+ }
+ else
+ node = node.FirstChild;
return true;
}
return false;
public override bool MoveToId (string id)
{
- XmlDocument doc;
-
- if (node.NodeType == XmlNodeType.Document)
- doc = (XmlDocument) node;
- else
- doc = node.OwnerDocument;
-
- XmlElement eltNew = doc.GetElementById (id);
+ XmlElement eltNew = document.GetElementById (id);
if (eltNew == null)
return false;
public override void MoveToRoot ()
{
- if (node.NodeType != XmlNodeType.Document)
- node = node.OwnerDocument;
+ node = document;
}
internal XmlNode Node { get { return node; } }