Groovy-xml

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

Groovy-XML

XMLは、オペレーティングシステムや開発言語に関係なく、プログラマが他のアプリケーションで読み取れるアプリケーションを開発できる、移植可能なオープンソース言語です。 これは、アプリケーション間でデータを交換するために使用される最も一般的な言語の1つです。

XMLとは何ですか?

拡張マークアップ言語XMLは、HTMLやSGMLによく似たマークアップ言語です。 これは、World Wide Web Consortiumによって推奨されており、オープンスタンダードとして利用できます。 XMLは、SQLベースのバックボーンを必要とせずに、少量から中量のデータを追跡するのに非常に役立ちます。

GroovyでのXMLサポート

Groovy言語は、XML言語の豊富なサポートも提供します。 使用される2つの最も基本的なXMLクラスは-

  • XML Markup Builder -Groovyは、さまざまなツリー構造のオブジェクト表現を作成するためにサブクラス化できるツリーベースのマークアップジェネレーターBuilderSupportをサポートしています。 通常、これらのビルダーは、XMLマークアップ、HTMLマークアップを表すために使用されます。 Groovyのマークアップジェネレーターは、疑似メソッドの呼び出しをキャッチし、それらをツリー構造の要素またはノードに変換します。 これらの擬似メソッドのパラメーターは、ノードの属性として扱われます。 メソッド呼び出しの一部としてのクロージャーは、結果のツリーノードのネストされたサブコンテンツと見なされます。
  • XML Parser -Groovy XmlParserクラスは、XMLドキュメントをノードインスタンスのツリーに解析するための単純なモデルを採用しています。 各ノードには、XML要素の名前、要素の属性、および任意の子ノードへの参照があります。 このモデルは、ほとんどの単純なXML処理に十分です。

すべてのXMLコード例について、次の単純なXMLファイルmovies.xmlを使用して、XMLファイルを作成し、その後ファイルを読み取ります。

<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>
      <year>1986</year>
      <rating>PG</rating>
      <stars>10</stars>
      <description>Vash the Stam pede!</description>
   </movie>

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

</collection>

XMLマークアップビルダー

構文

public MarkupBuilder()

MarkupBuilderは、XMLドキュメント全体を構築するために使用されます。 XMLドキュメントは、最初にXMLドキュメントクラスのオブジェクトを作成することで作成されます。 オブジェクトを作成したら、擬似メソッドを呼び出してXMLドキュメントのさまざまな要素を作成できます。

1つのブロック、つまり上記のXMLドキュメントから1つのムービー要素を作成する方法の例を見てみましょう-

import groovy.xml.MarkupBuilder

class Example {
   static void main(String[] args) {
      def mB = new MarkupBuilder()

     //Compose the builder
      mB.collection(shelf : 'New Arrivals') {
         movie(title : 'Enemy Behind')
         type('War, Thriller')
         format('DVD')
         year('2003')
         rating('PG')
         stars(10)
         description('Talk about a US-Japan war')
      }
   }
}

上記の例では、次のことに注意する必要があります-

  • * mB.collection()*-これは、<collection> </collection>のヘッドXMLタグを作成するマークアップジェネレーターです。
  • * movie(title: 'Enemy Behind')*-これらの擬似メソッドは、値を持つタグを作成するこのメソッドで子タグを作成します。 titleと呼ばれる値を指定することにより、これは実際に要素の属性を作成する必要があることを示します。
  • XMLドキュメントの残りの要素を作成するために、クロージャーが擬似メソッドに提供されます。
  • 生成されたXMLが標準出力ストリームに発行されるように、クラスMarkupBuilderのデフォルトコンストラクターが初期化されます

上記のプログラムを実行すると、次の結果が得られます-

<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>
</collection>

XMLドキュメント全体を作成するには、次のことを行う必要があります。

  • 要素のさまざまな値を保存するには、マップエントリを作成する必要があります。
  • マップの各要素に対して、各要素に値を割り当てています。
import groovy.xml.MarkupBuilder

class Example {
   static void main(String[] args) {
      def mp = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003',
         'PG', '10','Talk about a US-Japan war'],
         2 : ['Transformers','Anime, Science Fiction','DVD','1989',
         'R', '8','A scientific fiction'],
         3 : ['Trigun','Anime, Action','DVD','1986',
         'PG', '10','Vash the Stam pede'],
         4 : ['Ishtar','Comedy','VHS','1987', 'PG',
         '2','Viewable boredom ']]

      def mB = new MarkupBuilder()

     //Compose the builder
      def MOVIEDB = mB.collection('shelf': 'New Arrivals') {
         mp.each {
            sd ->
            mB.movie('title': sd.value[0]) {
               type(sd.value[1])
               format(sd.value[2])
               year(sd.value[3])
               rating(sd.value[4])
               stars(sd.value[4])
               description(sd.value[5])
            }
         }
      }
   }
}

上記のプログラムを実行すると、次の結果が得られます-

<collection shelf = 'New Arrivals'>
   <movie title = 'Enemy Behind'>
      <type>War, Thriller</type>
      <format>DVD</format>
      <year>2003</year>
      <rating>PG</rating>
      <stars>PG</stars>
      <description>10</description>
   </movie>
   <movie title = 'Transformers'>
      <type>Anime, Science Fiction</type>
      <format>DVD</format>
      <year>1989</year>
      <rating>R</rating>
      <stars>R</stars>
      <description>8</description>
   </movie>
   <movie title = 'Trigun'>
      <type>Anime, Action</type>
      <format>DVD</format>
      <year>1986</year>
      <rating>PG</rating>
      <stars>PG</stars>
      <description>10</description>
   </movie>
   <movie title = 'Ishtar'>
      <type>Comedy</type>
      <format>VHS</format>
      <year>1987</year>
      <rating>PG</rating>
      <stars>PG</stars>
      <description>2</description>
   </movie>
</collection>

XML解析

Groovy XmlParserクラスは、XMLドキュメントをノードインスタンスのツリーに解析するための単純なモデルを採用しています。 各ノードには、XML要素の名前、要素の属性、および任意の子ノードへの参照があります。 このモデルは、ほとんどの単純なXML処理に十分です。

構文

public XmlParser()
   throws ParserConfigurationException,
      SAXException

次のコードは、XMLパーサーを使用してXMLドキュメントを読み取る方法の例を示しています。

Movies.xmlという同じドキュメントがあり、XMLドキュメントを解析して適切な出力をユーザーに表示したいとします。 次のコードは、XMLドキュメントのコンテンツ全体を走査し、ユーザーに適切な応答を表示する方法のスニペットです。

import groovy.xml.MarkupBuilder
import groovy.util.*

class Example {

   static void main(String[] args) {

      def parser = new XmlParser()
      def doc = parser.parse("D:\\Movies.xml");

      doc.movie.each{
         bk->
         print("Movie Name:")
         println "${bk['@title']}"

         print("Movie Type:")
         println "${bk.type[0].text()}"

         print("Movie Format:")
         println "${bk.format[0].text()}"

         print("Movie year:")
         println "${bk.year[0].text()}"

         print("Movie rating:")
         println "${bk.rating[0].text()}"

         print("Movie stars:")
         println "${bk.stars[0].text()}"

         print("Movie description:")
         println "${bk.description[0].text()}"
         println("*******************************")
      }
   }
}

上記のプログラムを実行すると、次の結果が得られます-

Movie Name:Enemy Behind
Movie Type:War, Thriller
Movie Format:DVD
Movie year:2003
Movie rating:PG
Movie stars:10
Movie description:Talk about a US-Japan war
*******************************
Movie Name:Transformers
Movie Type:Anime, Science Fiction
Movie Format:DVD
Movie year:1989
Movie rating:R
Movie stars:8
Movie description:A schientific fiction
*******************************
Movie Name:Trigun
Movie Type:Anime, Action
Movie Format:DVD
Movie year:1986
Movie rating:PG
Movie stars:10
Movie description:Vash the Stam pede!
*******************************
Movie Name:Ishtar
Movie Type:Comedy
Movie Format:VHS
Movie year:1987
Movie rating:PG
Movie stars:2
Movie description:Viewable boredom

上記のコードについて注意すべき重要なこと。

  • クラスXmlParserのオブジェクトは、XMLドキュメントの解析に使用できるように形成されています。
  • パーサーには、XMLファイルの場所が与えられます。
  • 各ムービー要素について、クロージャーを使用して各子ノードを参照し、関連情報を表示しています。

movie要素自体については、@記号を使用して、movie要素に付加されたtitle属性を表示しています。