public static XDocument GetPageContent(ref Application oneNoteApp, string pageId, PageInfo pageInfo, out XmlNamespaceManager xnm) { string xml = null; UseOneNoteAPI(ref oneNoteApp, (oneNoteAppSafe) => { oneNoteAppSafe.GetPageContent(pageId, out xml, pageInfo, Constants.CurrentOneNoteSchema); }); return(OneNoteUtils.GetXDocument(xml, out xnm)); }
private static void UpdatePageContentSafeInternal(ref Application oneNoteApp, XDocument pageContent, XmlNamespaceManager xnm, int?attemptsCount) { var inkNodes = pageContent.Root.XPathSelectElements("one:InkDrawing", xnm) .Union(pageContent.Root.XPathSelectElements("//one:OE[.//one:InkDrawing]", xnm)) .Union(pageContent.Root.XPathSelectElements("one:Outline[.//one:InkWord]", xnm)).ToArray(); foreach (var inkNode in inkNodes) { if (inkNode.XPathSelectElement(".//one:T", xnm) == null) { inkNode.Remove(); } else { var inkWords = inkNode.XPathSelectElements(".//one:InkWord", xnm).Where(ink => ink.XPathSelectElement(".//one:CallbackID", xnm) == null).ToArray(); inkWords.Remove(); } } var pageTitleEl = pageContent.Root.XPathSelectElement("one:Title", xnm); // могли случайно удалить заголовок со страницы if (pageTitleEl != null && !pageTitleEl.HasElements && !pageTitleEl.HasAttributes) { pageTitleEl.Remove(); } try { UseOneNoteAPI(ref oneNoteApp, (oneNoteAppSafe) => { oneNoteAppSafe.UpdatePageContent(pageContent.ToString(), DateTime.MinValue, Constants.CurrentOneNoteSchema); }); } catch (COMException ex) { if (attemptsCount.GetValueOrDefault(int.MaxValue) < 30 && // 15 секунд - но каждое обновление требует времени. поэтому на самом деле дольше (OneNoteUtils.IsError(ex, Error.hrPageReadOnly) || OneNoteUtils.IsError(ex, Error.hrSectionReadOnly))) { Thread.Sleep(500); UpdatePageContentSafeInternal(ref oneNoteApp, pageContent, xnm, attemptsCount + 1); } else { throw; } } }