2017-02-08 6 views
0

onenoteノートブックから情報を取得しようとしています。私が知ることができる唯一の方法は、ノートブックの階層を取得し、すべての属性をプルしてページの実際のコンテンツを取得できるようにすることです。 XML文書の例を次に示します。Visual BasicでXML属性を使用して文字列配列を作成する

<?xml version="1.0"?> 
<one:Notebooks xmlns:one="http://schemas.microsoft.com/office/onenote/2013/onenote"> 
    <one:Notebook name="Notebook" nickname="Notebook" ID="**********" path="**********" lastModifiedTime="**********" color="**********"> 
     <one:Section name="**********" ID="**********" path="**********" lastModifiedTime="**********" color="**********"> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="1"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="1"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="1"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
      <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
     </one:Section> 
    </one:Notebook> 
</one:Notebooks> 

私は、次を使用して属性を引くことができた:

Dim oneNote = New OneNote.Application() 
oneNote.GetHierarchy(Nothing, Microsoft.Office.Interop.OneNote.HierarchyScope.hsPages, strXML) 
     Dim xdoc As New XmlDocument() 
     xdoc.LoadXml(strXML) 
    For Each Element As XmlElement In xdoc.SelectNodes("//*") 
     TextBox1.Text = TextBox1.Text & "Processing element with name: " & Element.Name & Environment.NewLine 
     For Each Attribute As XmlAttribute In Element.Attributes 
      TextBox1.Text = TextBox1.Text & Convert.ToChar(Keys.Tab) & Attribute.Name & ": " & Attribute.Value & Environment.NewLine 
     Next 
     TextBox1.Text = TextBox1.Text & Environment.NewLine 
    Next 

私は名前で特定の属性を引っ張るしようとすると、しかし、それは名前空間のエラーで戻ってきます。

For Each node As XmlNode In xdoc.DocumentElement.SelectNodes("//one:Notebooks/one:Notebook/one:Section") 
    TextBox1.Text = TextBox1.Text & node.Attributes.ItemOf("name").InnerText & Environment.NewLine 
Next 

私は、セクション、ページ名、ページのID、およびページレベルの名前で文字列配列を作成できるようにしたいと思います。どんな助けでも大歓迎です。あなたが名前空間を使用するXmlNamespaceManagerを使用する必要があり、常にXmlDocumentで

答えて

0

Imports System.Xml 

Module Module1 

    Sub Main() 
     Dim notebook As XDocument = <?xml version="1.0"?> 
            <one:Notebooks xmlns:one="http://schemas.microsoft.com/office/onenote/2013/onenote"> 
             <one:Notebook name="Notebook" nickname="Notebook" ID="**********" path="**********" lastModifiedTime="**********" color="**********"> 
              <one:Section name="SectionName1" ID="**********" path="**********" lastModifiedTime="**********" color="**********"> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="1"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="1"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="1"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
               <one:Page ID="**********" name="**********" dateTime="**********" lastModifiedTime="**********" pageLevel="2"/> 
              </one:Section> 
             </one:Notebook> 
            </one:Notebooks> 

     Dim xmlDoc As New XmlDocument 
     xmlDoc.LoadXml(notebook.ToString()) 

     Dim nsm As New XmlNamespaceManager(xmlDoc.NameTable) 
     nsm.AddNamespace("one", "http://schemas.microsoft.com/office/onenote/2013/onenote") 

     For Each node As XmlNode In xmlDoc.DocumentElement.SelectNodes("//one:Notebooks/one:Notebook/one:Section", nsm) 
      Console.WriteLine(node.Attributes.ItemOf("name").InnerText) 
     Next 

     Console.ReadLine() 

    End Sub 

End Module 

出力:

SectionName1

そして、私はあなたと一緒にそこから続けることができると確信していその知識

0

新しいあなたが名前空間をインポートすることができますSystem.Xml.Linq種類(.NET 3.5+)、その後、あなたはXMLへの組み込みXMLリテラルとLINQのサポートを使用することができ、:

Imports <xmlns:one = "http://schemas.microsoft.com/office/onenote/2010/onenote"> 
'... 
Dim oneNote = New OneNote.Application() 
Dim strXML As String = Nothing 
oneNote.GetHierarchy(Nothing, Microsoft.Office.Interop.OneNote.HierarchyScope.hsPages, strXML) 
Dim xml = XDocument.Parse(strXML) 
Dim pages = (
    From s In xml...<one:Section> 
    From p In s.<one:Page> 
    Select $"Section={[email protected]} Page={[email protected]} PageID={[email protected]} PageLevel={[email protected]}" 
).ToList() 

あなたは何かを返すようにSelect句を修正することができますelse - eg上記のような文字列(VB 14文字列補間を使用するため、VS2015 +が必要な場合や古い構文に変更する場合)の代わりに、必要なプロパティを持つ匿名型を使用します。

関連する問題