private static void WriteBoundElementContentTo(DataPointer dp, XmlWriter w) { if (!dp.IsEmptyElement && dp.MoveToFirstChild()) { do { WriteTo(dp, w); }while (dp.MoveToNextSibling()); dp.MoveToParent(); } }
private static void WriteTo(DataPointer dp, XmlWriter w) { switch (dp.NodeType) { case XmlNodeType.Attribute: if (!dp.IsDefault) { w.WriteStartAttribute(dp.Prefix, dp.LocalName, dp.NamespaceURI); if (dp.MoveToFirstChild()) { do { WriteTo(dp, w); }while (dp.MoveToNextSibling()); dp.MoveToParent(); } w.WriteEndAttribute(); } break; case XmlNodeType.Element: WriteBoundElementTo(dp, w); break; case XmlNodeType.Text: w.WriteString(dp.Value); break; default: Debug.Assert(((IXmlDataVirtualNode)dp).IsOnColumn(null)); if (dp.GetNode() != null) { dp.GetNode().WriteTo(w); } break; } }
private XmlNode CloneTreeInternal(DataPointer other) { Debug.Assert(_ignoreDataSetEvents == true); Debug.Assert(_ignoreXmlEvents == true); Debug.Assert(IsFoliationEnabled == false); // Create the diconnected tree based on the other navigator XmlNode newNode = CloneNode(other); DataPointer dp = new DataPointer(other); try { dp.AddPointer(); if (newNode.NodeType == XmlNodeType.Element) { int cAttributes = dp.AttributeCount; for (int i = 0; i < cAttributes; i++) { dp.MoveToOwnerElement(); if (dp.MoveToAttribute(i)) { newNode.Attributes.Append((XmlAttribute)CloneTreeInternal(dp)); } } dp.MoveTo(other); } for (bool fMore = dp.MoveToFirstChild(); fMore; fMore = dp.MoveToNextSibling()) newNode.AppendChild(CloneTreeInternal(dp)); } finally { dp.SetNoLongerUse(); } return newNode; }
public override XmlNode CloneNode(bool deep) { XmlDataDocument clone = (XmlDataDocument)(base.CloneNode(false)); clone.Init(DataSet.Clone()); clone._dataSet.EnforceConstraints = _dataSet.EnforceConstraints; Debug.Assert(clone.FirstChild == null); if (deep) { DataPointer dp = new DataPointer(this, this); try { dp.AddPointer(); for (bool fMore = dp.MoveToFirstChild(); fMore; fMore = dp.MoveToNextSibling()) { XmlNode cloneNode; if (dp.NodeType == XmlNodeType.Element) cloneNode = clone.CloneTree(dp); else cloneNode = clone.CloneNode(dp); clone.AppendChild(cloneNode); } } finally { dp.SetNoLongerUse(); } } return clone; }
private static void WriteTo( DataPointer dp, XmlWriter w ) { switch ( dp.NodeType ) { case XmlNodeType.Attribute: if ( !dp.IsDefault ) { w.WriteStartAttribute( dp.Prefix, dp.LocalName, dp.NamespaceURI ); if ( dp.MoveToFirstChild() ) { do { WriteTo( dp, w ); } while ( dp.MoveToNextSibling() ); dp.MoveToParent(); } w.WriteEndAttribute(); } break; case XmlNodeType.Element: WriteBoundElementTo( dp, w ); break; case XmlNodeType.Text: w.WriteString(dp.Value); break; default: Debug.Assert( ((IXmlDataVirtualNode)dp).IsOnColumn( null ) ); if ( dp.GetNode() != null ) dp.GetNode().WriteTo( w ); break; } }
private static void WriteBoundElementContentTo( DataPointer dp, XmlWriter w ) { if ( !dp.IsEmptyElement && dp.MoveToFirstChild() ) { do { WriteTo( dp, w ); } while ( dp.MoveToNextSibling() ); dp.MoveToParent(); } }
private static void WriteTo(DataPointer dp, XmlWriter w) { switch (dp.NodeType) { case XmlNodeType.Element: WriteBoundElementTo(dp, w); return; case XmlNodeType.Attribute: if (dp.IsDefault) { break; } w.WriteStartAttribute(dp.Prefix, dp.LocalName, dp.NamespaceURI); if (dp.MoveToFirstChild()) { do { WriteTo(dp, w); } while (dp.MoveToNextSibling()); dp.MoveToParent(); } w.WriteEndAttribute(); return; case XmlNodeType.Text: w.WriteString(dp.Value); return; default: if (dp.GetNode() != null) { dp.GetNode().WriteTo(w); } break; } }