libro
www.tuyano.com
Google Apps Scriptプログラミング [中級編]

UrlFetchとXmlデータの利用 (5/6)

作成:2011-07-11 08:07
更新:2011-11-04 16:31

■Xml, XmlDocument, XmlElement利用の流れ

では、Xml関係として用意されている各オブジェクトの重要なメソッドについてざっと整理しておきましょう。全部説明するとかなりのスペースが必要になりますので、ここでは「XMLデータから必要な情報をとり出し処理する」ために知っておきたいものに絞って整理していきましょう。

○XmlオブジェクトからXmlDocumentを生成する
変数 = Xml.parse( XMLデータの指定 );
変数 = Xml.parseJS( XMLデータの指定 );
通常、XMLデータを扱う場合は、まずXml.parseを使い、XMLデータを元にXmlDocumentオブジェクトを生成します。Xml.parseJSは、「XML Short Hand」と呼ばれる形式に従って記述されたJavaScript配列を元にXmlDocumentを生成するものです。

○XmlDocumentからXmlElementを取得する
変数 =《XmlDocument》.getElement();

○XMLデータをテキストとして取得する
変数 =《XmlDocument》.toXmlString();
XmlDocumentのデータを扱う場合、まずgetElementXmlElementを取得します。これは、いわば「ルートとなるエレメントを取り出す」ものと考えるとよいでしょう。これで取り出したXmlElementから、その中に組み込まれているXmlElementを探していくことになります。

○XmlElement内にあるXmlElementを取得する
変数 =《XmlElement》.getElement( エレメント名 );
変数 =《XmlElement》.getElement( 名前空間, エレメント名 );

変数 =《XmlElement》.getElements();
変数 =《XmlElement》.getElements( エレメント名 );
変数 =《XmlElement》.getElements( 名前空間, エレメント名 );
XmlElementに含まれるXmlElementを取得するものは、2つあります。getElementは1つのエレメントだけを取得するもので、getElementsは複数のエレメントをXmlElement配列として取得するものです。通常、引数に取り出すエレメント名を指定します。特定の名前空間からのみエレメントを取り出すこともできます。またgetElementsで引数を省略するとそのエレメント下にある全エレメントを取得できます。

○XmlElementのテキスト値を取得する
変数 =《XmlElement》.getText();
エレメントのテキスト値を取得するものです。要するに、<abc>hoge</abc>というようなエレメントから「hoge」の値を取り出すためのものです。

○XmlElementの属性を取得する
変数 =《XmlElement》.getAttribute( 属性名 );
変数 =《XmlElement》.getAttribute( 名前空間, 属性名 );
変数 =《XmlElement》.getAttributes();
エレメントの属性情報を、XmlAttributeオブジェクトとして取り出すものです。getAttributeは、指定した名前の属性のオブジェクトをとり出します。getAttributesは全属性をXmlAttribute配列としてとり出します。

○XmlAttributeから属性名・値を取得する
変数 =《XmlAttribute》.getName();
変数 =《XmlAttribute》.getValue();
属性を示すXmlAttributeから属性の名前や値を取り出すものです。これで属性の値をテキストとして取り出すことができます。

――さあ、Xml関係のメソッドが一通りわかったところで、先のサンプルコードを改めてチェックしてみましょう。

1. UrlFetchApp.fetchでXMLデータを取得する。
2. Xml.parseXmlDocumentを生成する。
3. XmlDocumentからルートのXmlElementを取得する。
4. XmlElementから各データとなるentryエレメントのXmlElement配列を取得する。
5. 繰り返しを使い、XmlElementからtitleupdatecontentといったエレメントのXmlElementを取得し、それぞれのテキストをgetTextでとり出しシートに書きだす。

いかがですか。エレメント取得とそこからの値の取得の流れがわかれば、それほど難しいものでもないでしょう?

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※前回、作成したサンプル

function fetchData(){
	var sheet = SpreadsheetApp.getActiveSheet();
	var url = "http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=google";
	var response = UrlFetchApp.fetch(url);
	var xml = Xml.parse(response.getContentText(), false);
	var els = xml.getElement().getElements("entry");
	for(var i = 0;i < els.length;i++){
		var el = els[i];
		var title = el.getElement("title").getText();
		var updated = el.getElement("updated").getText();
		var content	= el.getElement("content").getText();
		sheet.getRange(i + 1,1).setValue(updated);
		sheet.getRange(i + 1,2).setValue(title);
		sheet.getRange(i + 1,3).setValue(content);
	}
}
※関連コンテンツ

「Google Apps Scriptプログラミング [中級編]」に戻る