Vb.net-xml-processing

提供:Dev Guides
移動先:案内検索

VB.Net-XML処理

拡張マークアップ言語(XML)は、HTMLやSGMLによく似たマークアップ言語です。 これは、World Wide Web Consortiumによって推奨されており、オープンスタンダードとして利用できます。

Net Frameworkの System.Xml 名前空間には、XMLドキュメントを処理するためのクラスが含まれています。 以下は、System.Xml名前空間で一般的に使用されるクラスの一部です。
Sr.No. Class & Description
1

XmlAttribute

属性を表します。 属性の有効なデフォルト値は、ドキュメントタイプ定義(DTD)またはスキーマで定義されます。

2

XmlCDataSection

CDATAセクションを表します。

3

XmlCharacterData

いくつかのクラスで使用されるテキスト操作メソッドを提供します。

4

XmlComment

XMLコメントのコンテンツを表します。

5

XmlConvert

XML名をエンコードおよびデコードし、共通言語ランタイムタイプとXMLスキーマ定義言語(XSD)タイプの間で変換するためのメソッドを提供します。 データ型を変換する場合、返される値はロケールに依存しません。

6

XmlDeclaration

XML宣言ノード<?xml version = '1.0' …​?>を表します。

7

XmlDictionary

Windows Communication Foundation(WCF)のXMLリーダー/ライターの実装を最適化するために使用される辞書を実装します。

8

XmlDictionaryReader

Windows Communication Foundation(WCF)がXmlReaderから派生して、シリアル化と逆シリアル化を行う抽象クラス。

9

XmlDictionaryWriter

Windows Communication Foundation(WCF)がXmlWriterから派生して、シリアル化と逆シリアル化を行う抽象クラスを表します。

10

XmlDocument

XMLドキュメントを表します。

11

XmlDocumentFragment

ツリーの挿入操作に役立つ軽量オブジェクトを表します。

12

XmlDocumentType

文書型宣言を表します。

13

XmlElement

要素を表します。

14

XmlEntity

<!ENTITY …​などのエンティティ宣言を表します >.

15

XmlEntityReference

エンティティ参照ノードを表します。

16

XmlException

最後の例外に関する詳細情報を返します。

17

XmlImplementation

XmlDocumentオブジェクトのセットのコンテキストを定義します。

18

XmlLinkedNode

このノードの直前または直後のノードを取得します。

19

XmlNode

XMLドキュメント内の単一ノードを表します。

20

XmlNodeList

ノードの順序付けられたコレクションを表します。

21

XmlNodeReader

XmlNode内のXMLデータへの高速でキャッシュされない前方アクセスのみを提供するリーダーを表します。

22

XmlNotation

<!NOTATION …​などの表記法宣言を表します >.

23

XmlParserContext

XmlReaderがXMLフラグメントを解析するために必要なすべてのコンテキスト情報を提供します。

24

XmlProcessingInstruction

ドキュメントのテキストにプロセッサ固有の情報を保持するためにXMLが定義する処理命令を表します。

25

XmlQualifiedName

XML修飾名を表します。

26

XmlReader

XMLデータへの高速でキャッシュされない前方専用アクセスを提供するリーダーを表します。

27

XmlReaderSettings

Createメソッドによって作成されたXmlReaderオブジェクトでサポートする一連の機能を指定します。

28

XmlResolver

URI(Uniform Resource Identifier)によって名前が付けられた外部XMLリソースを解決します。

29

XmlSecureResolver

XmlResolverオブジェクトをラップし、基になるXmlResolverがアクセスできるリソースを制限することにより、XmlResolverの別の実装を保護するのに役立ちます。

30

XmlSignificantWhitespace

混合コンテンツノードのマークアップ間の空白、またはxml:space = 'preserve’スコープ内の空白を表します。 これは、重要な空白とも呼ばれます。

31

XmlText

要素または属性のテキストコンテンツを表します。

32

XmlTextReader

XMLデータへの高速でキャッシュされないフォワード専用アクセスを提供するリーダーを表します。

33

XmlTextWriter

W3C Extensible Markup Language(XML)1.0およびXML推奨の名前空間に準拠するXMLデータを含むストリームまたはファイルを生成する、高速でキャッシュされないフォワード専用の方法を提供するライターを表します。

34

XmlUrlResolver

URI(Uniform Resource Identifier)によって名前が付けられた外部XMLリソースを解決します。

35

XmlWhitespace

要素コンテンツの空白を表します。

36

XmlWriter

XMLデータを含むストリームまたはファイルを生成する、高速でキャッシュされていない、転送専用の手段を提供するライターを表します。

37

XmlWriterSettings

XmlWriter.Createメソッドによって作成されたXmlWriterオブジェクトでサポートする一連の機能を指定します。

XMLパーサーAPI

XMLデータに対して最も基本的で広く使用されている2つのAPIは、SAXおよびDOMインターフェースです。

  • * Simple API for XML(SAX)*-ここでは、目的のイベントのコールバックを登録し、パーサーにドキュメントを処理させます。 これは、ドキュメントが大きい場合やメモリに制限がある場合に便利です。ファイルをディスクから読み取るときに解析し、ファイル全体がメモリに保存されることはありません。
  • Document Object Model(DOM)API -これはWorld Wide Web Consortiumの推奨事項で、ファイル全体がメモリに読み込まれ、XMLドキュメントのすべての機能を表す階層(ツリーベース)形式で保存されます。

SAXは明らかに、大きなファイルを操作する場合、DOMほど速く情報を処理できません。 一方、DOMを排他的に使用すると、特に多くの小さなファイルで使用する場合、リソースを本当に殺す可能性があります。

SAXは読み取り専用ですが、DOMはXMLファイルの変更を許可します。 これら2つの異なるAPIは文字通り互いに補完するため、大規模なプロジェクトで両方を使用できない理由はありません。

すべてのXMLコードの例について、単純なXMLファイルmovies.xmlを入力として使用しましょう-

<?xml version = "1.0"?>

<collection shelf = "New Arrivals">
   <movie title = "Enemy Behind">
      <type>War, Thriller</type>
      <format>DVD</format>
      <year>2003</year>
      <rating>PG</rating>
      <stars>10</stars>
      <description>Talk about a US-Japan war</description>
   </movie>

   <movie title = "Transformers">
      <type>Anime, Science Fiction</type>
      <format>DVD</format>
      <year>1989</year>
      <rating>R</rating>
      <stars>8</stars>
      <description>A schientific fiction</description>
   </movie>

   <movie title = "Trigun">
      <type>Anime, Action</type>
      <format>DVD</format>
      <episodes>4</episodes>
      <rating>PG</rating>
      <stars>10</stars>
      <description>Vash the Stampede!</description>
   </movie>

   <movie title = "Ishtar">
      <type>Comedy</type>
      <format>VHS</format>
      <rating>PG</rating>
      <stars>2</stars>
      <description>Viewable boredom</description>
   </movie>
</collection>

SAX APIを使用したXMLの解析

SAXモデルでは、 XmlReader および XmlWriter クラスを使用してXMLデータを操作します。

*XmlReader* クラスを使用して、XMLデータを高速で前方のみのキャッシュされない方法で読み取ります。 XMLドキュメントまたはストリームを読み取ります。

例1

この例は、movies.xmlファイルからXMLデータを読み取る方法を示しています。

次の手順を実行します-

  • movies.xmlファイルをアプリケーションのbin \ Debugフォルダーに追加します。
  • Form1.vbファイルにSystem.Xml名前空間をインポートします。
  • フォームにラベルを追加し、そのテキストを「Movies Galore」に変更します。
  • 3つのリストボックスと3つのボタンを追加して、xmlファイルの映画のタイトル、タイプ、説明を表示します。
  • コードエディタウィンドウを使用して次のコードを追加します。
Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.
      Me.Text = "finddevguides.com"
   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      ListBox1().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
         If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "movie" Then
            ListBox1.Items.Add(xr.GetAttribute(0))
         End If
      Loop
   End Sub

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      ListBox2().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
         If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "type" Then
            ListBox2.Items.Add(xr.ReadElementString)
         Else
            xr.Read()
         End If
      Loop
   End Sub

   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
      ListBox3().Items.Clear()
      Dim xr As XmlReader = XmlReader.Create("movies.xml")
      Do While xr.Read()
         If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "description" Then
            ListBox3.Items.Add(xr.ReadElementString)
         Else
            xr.Read()
         End If
      Loop
   End Sub
End Class

Microsoft Visual Studioのツールバーにある[開始]ボタンを使用して、上記のコードを実行および実行します。 ボタンをクリックすると、ファイルのムービーのタイトル、タイプ、説明が表示されます。

VB.Net XML処理の例1

*XmlWriter* クラスは、XMLデータをストリーム、ファイル、またはTextWriterオブジェクトに書き込むために使用されます。 また、フォワードのみの非キャッシュ方式でも機能します。

例2

実行時にデータを追加してXMLファイルを作成しましょう。 次の手順を実行します-

  • フォームにWebBrowserコントロールとボタンコントロールを追加します。
  • ボタンのTextプロパティをShow Authors Fileに変更します。
  • コードエディターで次のコードを追加します。
Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.
      Me.Text = "finddevguides.com"
   End Sub
   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim xws As XmlWriterSettings = New XmlWriterSettings()
      xws.Indent = True
      xws.NewLineOnAttributes = True
      Dim xw As XmlWriter = XmlWriter.Create("authors.xml", xws)
      xw.WriteStartDocument()
      xw.WriteStartElement("Authors")
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "1")
      xw.WriteElementString("fname", "Zara")
      xw.WriteElementString("lname", "Ali")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "2")
      xw.WriteElementString("fname", "Priya")
      xw.WriteElementString("lname", "Sharma")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "3")
      xw.WriteElementString("fname", "Anshuman")
      xw.WriteElementString("lname", "Mohan")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "4")
      xw.WriteElementString("fname", "Bibhuti")
      xw.WriteElementString("lname", "Banerjee")
      xw.WriteEndElement()
      xw.WriteStartElement("author")
      xw.WriteAttributeString("code", "5")
      xw.WriteElementString("fname", "Riyan")
      xw.WriteElementString("lname", "Sengupta")
      xw.WriteEndElement()
      xw.WriteEndElement()
      xw.WriteEndDocument()
      xw.Flush()
      xw.Close()
      WebBrowser1.Url = New Uri(AppDomain.CurrentDomain.BaseDirectory + "authors.xml")
   End Sub
End Class
*Microsoft Visual Studioのツールバーにある[開始]ボタンを使用して、上記のコードを実行および実行します。 [著者ファイルを表示]をクリックすると、新しく作成されたauthors.xmlファイルがWebブラウザに表示されます。

VB.Net XML処理例2

DOM APIを使用したXMLの解析

ドキュメントオブジェクトモデル(DOM)によると、XMLドキュメントはノードとノードの属性で構成されます。* XmlDocument *クラスは、.Net FrameworkのXML DOMパーサーを実装するために使用されます。 また、ドキュメント内のデータを挿入、削除、または更新することにより、既存のXMLドキュメントを変更できます。

以下は、 XmlDocument クラスの一般的に使用されるメソッドの一部です-

Sr.No. Method Name & Description
1

AppendChild

このノードの子ノードのリストの最後に指定されたノードを追加します。

2

CreateAttribute(String)

指定された名前でXmlAttributeを作成します。

3

CreateComment

指定されたデータを含むXmlCommentを作成します。

4

CreateDefaultAttribute

指定されたプレフィックス、ローカル名、ネームスペースURIを使用してデフォルト属性を作成します。

5

CreateElement(String)

指定された名前で要素を作成します。

6

CreateNode(String, String, String)

指定されたノードタイプ、名前、およびNamespaceURIでXmlNodeを作成します。

7

CreateNode(XmlNodeType, String, String)

指定されたXmlNodeType、Name、およびNamespaceURIを使用してXmlNodeを作成します。

8

CreateNode(XmlNodeType, String, String, String)

指定されたXmlNodeType、Prefix、Name、およびNamespaceURIを使用してXmlNodeを作成します。

9

CreateProcessingInstruction

指定された名前とデータでXmlProcessingInstructionを作成します。

10

CreateSignificantWhitespace

XmlSignificantWhitespaceノードを作成します。

11

CreateTextNode

指定されたテキストでXmlTextを作成します。

12

CreateWhitespace

XmlWhitespaceノードを作成します。

13

CreateXmlDeclaration

指定した値でXmlDeclarationノードを作成します。

14

GetElementById

指定されたIDを持つXmlElementを取得します。

15

GetElementsByTagName(String)

指定された名前に一致するすべての子孫要素のリストを含むXmlNodeListを返します。

16

GetElementsByTagName(String, String)

指定されたLocalNameおよびNamespaceURIに一致するすべての子孫要素のリストを含むXmlNodeListを返します。

17

InsertAfter

指定した参照ノードの直後に指定したノードを挿入します。

18

InsertBefore

指定した参照ノードの直前に指定したノードを挿入します。

19

Load(Stream)

指定されたストリームからXMLドキュメントをロードします。

20

Load(String)

指定されたURLからXMLドキュメントをロードします。

21

Load(TextReader)

指定されたTextReaderからXMLドキュメントをロードします。

22

Load(XmlReader)

指定したXmlReaderからXMLドキュメントをロードします。

23

LoadXml

指定された文字列からXMLドキュメントをロードします。

24

PrependChild

このノードの子ノードのリストの先頭に指定されたノードを追加します。

25

ReadNode

XmlReaderの情報に基づいてXmlNodeオブジェクトを作成します。 リーダーは、ノードまたは属性に配置する必要があります。

26

RemoveAll

現在のノードのすべての子ノードおよび/または属性を削除します。

27

RemoveChild

指定された子ノードを削除します。

28

ReplaceChild

子ノードoldChildをnewChildノードに置き換えます。

29

Save(Stream)

XMLドキュメントを指定されたストリームに保存します。

30

Save(String)

XMLドキュメントを指定されたファイルに保存します。

31

Save(TextWriter)

XMLドキュメントを指定されたTextWriterに保存します。

32

Save(XmlWriter)

XMLドキュメントを指定されたXmlWriterに保存します。

実施例3

この例では、xmlドキュメントauthors.xmlにいくつかの新しいノードを挿入し、リストボックスにすべての作成者の名を表示します。

次の手順を実行します-

  • authors.xmlファイルをアプリケーションのbin/Debugフォルダーに追加します(最後の例を試した場合はそこにあるはずです)
  • System.Xml名前空間をインポートする
  • フォームにリストボックスとボタンコントロールを追加し、ボタンコントロールのtextプロパティをShow Authorsに設定します。
  • コードエディターを使用して次のコードを追加します。
Imports System.Xml
Public Class Form1
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      ' Set the caption bar text of the form.
      Me.Text = "finddevguides.com"
   End Sub

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      ListBox1.Items.Clear()

      Dim xd As XmlDocument = New XmlDocument()
      xd.Load("authors.xml")

      Dim newAuthor As XmlElement = xd.CreateElement("author")
      newAuthor.SetAttribute("code", "6")

      Dim fn As XmlElement = xd.CreateElement("fname")
      fn.InnerText = "Bikram"
      newAuthor.AppendChild(fn)

      Dim ln As XmlElement = xd.CreateElement("lname")
      ln.InnerText = "Seth"
      newAuthor.AppendChild(ln)
      xd.DocumentElement.AppendChild(newAuthor)

      Dim tr As XmlTextWriter = New XmlTextWriter("movies.xml", Nothing)
      tr.Formatting = Formatting.Indented
      xd.WriteContentTo(tr)
      tr.Close()

      Dim nl As XmlNodeList = xd.GetElementsByTagName("fname")

      For Each node As XmlNode In nl
         ListBox1.Items.Add(node.InnerText)
      Next node
   End Sub
End Class
  • Microsoft Visual Studioのツールバーにある[開始]ボタンを使用して、上記のコードを実行および実行します。 [著者を表示]ボタンをクリックすると、実行時に追加した著者を含むすべての著者の名が表示されます。

VB.Net XML処理の例3