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;
}