OneNoteをCOM経由で使う2回目 - 新日々此何有哉
いいヒントがあったので、前進…なのですが、OneNoteのXMLの要素には接頭語がついているようです(one:section)。
Sample Code/App :: OneNote Stats - Engineering OneNote Blog - Site Home - MSDN Blogs
ここの例にあるように、XmlDocument経由では扱えるのですが、LINQ to XMLのXDocumentではどうするんでしょう…あ、XNamespace クラス (System.Xml.Linq)を使えばいいのか。
// XmlDocument版 String strXML = default(string); onApplication.GetHierarchy(null, HierarchyScope.hsPages, out strXML); var oneNoteXML = new XmlDocument(); oneNoteXML.LoadXml(strXML); XmlNamespaceManager nsmgr = new XmlNamespaceManager(oneNoteXML.NameTable); string OneNoteNamespace = "http://schemas.microsoft.com/office/onenote/2007/onenote"; nsmgr.AddNamespace("one",OneNoteNamespace); XmlNodeList notebooks = oneNoteXML.SelectNodes("//one:Notebook", nsmgr); System.Console.WriteLine("You have " + notebooks.Count + " notebooks"); XmlNodeList sections = oneNoteXML.SelectNodes("//one:Section", nsmgr); System.Console.WriteLine("You have " + sections.Count + " sections"); XmlNodeList pages = oneNoteXML.SelectNodes("//one:Page", nsmgr); System.Console.WriteLine("You have " + pages.Count + " pages");
//LINQ to XML版。ノートブック一覧を取得 String strXML = default(string); onApplication.GetHierarchy(null, HierarchyScope.hsPages, out strXML); var oneNoteXML = XDocument.Parse(strXML); XNamespace oneNoeteIns = "http://schemas.microsoft.com/office/onenote/2007/onenote"; var noteBooks = from p in oneNoteXML.Root.Elements(oneNoeteIns + "Notebook") select p; foreach (var book in noteBooks){ Console.WriteLine("{0}", book.Attribute("name")); }
なるほど。