SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
iPhone輪講第8回
Lesson15
Lesson15
XMLとRSS
XML
XMLとは
HTMLのようにタグを使ってマーク付けする言語を
マークアップ言語(Markup Language)と呼ぶ
XMLもタグによるマークアップ言語のひとつ
HTMLはWebページ専用にデザインされているが,XMLは色々なものに
利用できるように設計されている
なので拡張可能なマークアップ言語(eXtensible Markup Language)
で,XML
DOMパーサ
DOM(Document Object Model)パーサ
XMLがもつ構造をそのままプログラムから操作できるようにしたもの
XMLのタグ同士の階層関係の事を木構造と呼ぶ
木構造を直接操作できるのがDOMパーサ
rss
link
channel
title
http://...ホットニュース
<rss>
<channel>
<title>
ホットニュース
</title>
<link>
http://...
</link>
</channel>
</rss>
SAXパーサ
SAX(Simple API for XML)パーサ
XMLドキュメントを上から読み上げるように処理する
RSSファイル読み上げてみる
『まずrssのタグが来た,次にchannnelのタグが来た,titleのタグが来た,
タイトルのテキストがこれで,titleのタグが終わった…』と,
タグのはじめと終わり,その間に挟まってテキストを順次レポートする
SAXパーサ
何かを読むたびにレポートが上がってくるので,
「イベント駆動型パーサ」とも呼ばれる
<rss>
<channel>
<title>
ホットニュース
</title>
<link>
http://...
</link>
</channel>
</rss>
start rss
start channel
start title
text ホットニュース
end title
start link
text http://...
end link
end channel
end rss
木構造
DOMタイプのパーサを使う場合
ポイントとなるのが木構造
木構造は木のような格好をしている構造
根(root),幹(trunk),葉(leaf)
がある
特に根の事はルートと呼ぶ事が多い
根(root)
幹(trunk)
葉(leaf)
木構造
根や幹や葉の事をまとめてノード
(node)と呼ぶ
木構造ではノード同士の関係も重要
自分よりも上(ルートに近い方)にあ
るノードを親(parent),
下にあるのが子(child)
隣の(同じ親を持っている)ノードの
ことは兄弟(sibling)
親(parent)
子(child)
兄弟(sibling)
木構造
子になるノードは複数いる可能性があ
る.それに対して親ノードは1つだけ
子の数は0以上で,親の数は
常に1となる
ルートノードは例外で,親がいない
親(parent)
子(child)
兄弟(sibling)
CocoaのXMLパーサ
NSXMLDocument,NSXMLNode,NSXMLElement
CocoaのXML関係のクラスは,まとめて「NSXMLクラス」と呼ぶ
NSXMLクラスにはDOMパーサと,SAXパーサのためのものが含まれる
DOMパーサのためのNSXMLクラス
これらのうちでよく使われるのが
NSXMLDocument
NSXMLNode
NSXMLElement
NSXMLDTDとNSXMLDTDNodeは
XMLドキュメントを定義するDTDと
いう使用をサポートするのに使う
DTD(Document Type
Definiton)は,XMLドキュメント
で使われるタグを定義する
NSObject
NSXMLDocument
NSXMLNode
NSXMLElement
NSXMLDTD
NSXMLDTDNode
SAXパーサのためのNSXMLクラス
SAXパーサのためのクラスは
NSXParser
NSObject
NSXMLNode
XMLドキュメントのパース
XMLドキュメントをパースする
パースにはNSXMLDocumentクラスを使う
以下の初期化メソッドを使うとパースが始まる
NSDocument
- (id)initWithContentsOfURL:(NSURL*)url options:(unsigned int)mask error:(NSError**)error
XMLドキュメントのURLと,オプションmaskを指定してパースする
- (id)initWithData:(NSData*)data options:(unsigned int)mask error:(NSError**)error
XMLドキュメントのデータdataと,オプションmaskを指定してパースする
- (id)initWithXMLString:(NSString*)string options:(unsigned int)mask error:(NSError**)error
XMLドキュメントの文字列stringと,オプションmaskを指定してパースする
XMLドキュメントのパース
XMLドキュメントをパースする
オプションには以下の値を指定できる
NSXMLDocumentTidyXMLを使うと,HTMLもXMLのようにパースできる
これができるとHTMLのタグで木構造で扱える
定数 説明
NSXMLDocumentTidyHTML HTMLをXHTMLとして解釈してパースする
NSXMLDocumentTidyXML 不正なXMLを正式なXMLに変換してパースする
NSXMLDocumentValidata DTDかXML Schemaを使ってXMLドキュメントを検証する
NSXMLDocumentXInclude Xincludeで指定されているドキュメントを読み込む
XPath
XMLドキュメントをパースしたら次はそこから
ノードを取り出す
ノードを取り出すもっとも単純な方法は親子関係を辿って行く事
まずルートノードを取得して,その子を取り出して,さらにその子を取り出
して…を繰り返して行く
XPath
RSSのタイトルを取り出すとする
rssノードの下の,channelノードの下の
titleノードが含むテキストファイル
/rss/channel/titleと書いたら
わかりやすい
rss
title
channel
link
description
/rss/channel/title
XPath
XMLではあるノードの位置をパスとして書き出す規格として
Xpathと呼ばれるものがある
NSXMLにもXPathを指定してノードを取得する
nondesForXpath:errorというメソッドがある
NSXMLNode
- (NSArray*)nodesForXPath:(NSString*)xpath error:(NSError**)error
Xpathを指定して,ノードを取得する
ノードの情報
ノードを取得したら,そのノードに関するいろいろな情報を取得する
NSXMLNode
- (NSXMLNodeKind)kind
ノードの種類を取得する用意されている種類は,NSXMLInvalidKind, NSXMLDocumentKind,
NSXMLCommentKind, NSXMLTextKind, NSXMLDTDKind, NSXMLEntityDeclarationKind,
NSXMLAttributrDeclarationKind, NSXMLElementDeclarationKind,
NSXMLNotationDeclarationKind
- (NSString*)name
ノードの名前を取得します
- (NSString*)stringValue
このノードが含む,テキストを取得します
- (NSString*)XMLString
このノードのXMLドキュメントでの表示を取得する.自分自身のタグも含む
これらのメソッドから何が取得でき
るのか
次のようなXMLを考える
これをパースするとtitleのタグと,その
下にテキストノードとが出来上がる
titleノードからメソッドを使って情報を
取得する
<title>楽しいCocoa</title>
メソッド 得られる情報
kind NSXMLElementKind
name title
stringValue 楽しいCocoa
XMLString <title>楽しいCocoa</title>
ノードの親子関係
あるノードから親,子,兄弟といった関係にあるノードを取得する事ができる
NSXMLNode
- (NSXMLNode*)parent
親ノードを取得する
- (unsigned int)childCount
子ノードの数を取得する
- (NSArray*)children
子ノードを配列の形で取得する
- (NSXMLNode*)childAtIndex:(unsigned int)index
インデックスindexで指定した子ノードを取得する
- (NSXMLNode*)previousSibling
1つ前にある兄弟ノードを取得する
- (NSXMLNode*)nextSibling
1つ次にある兄弟ノードを取得する
ノードの親子関係
previousSibling
parent
childAtIndex:
nextSibling
children
childCount
XMLドキュメントの関係
それぞれのノードからはそのノードが属しているNSXMLDocumentのインス
タンスを取得する事ができる
NSXMLDocumentからはルートノードを取得できる
NSXMLNode
- (NSXMLDocument*)rootDocument
このノードを含むNSXMLDocumentのインスタンスを取得する
NSXMLDocument
- (NSXMLElement*)rootElement
このドキュメントのルートノードを取得する
属性値の取得
XMLではタグの中に値を指定する事ができる
これを属性と呼ぶ
type = string というところが属性
typeのところを属性名, string のことを属性値と呼ぶ
<title type = string > </title>
属性値の取得
ノードから属性を取得するメソッドはNSXMLElementにある
どちらも取得できるのはノードである事に注意
これは属性ノードになる
NSXMLElement
- (NSXMLNode*)attributeForName:(NSSring*)name
名前nameで指定した属性ノードに取得します
- (NSArray*)attributes
属性ノードの配列を取得します
おわり

Mais conteúdo relacionado

Semelhante a Cocoa Pro08 (9)

What is xaml
What is xamlWhat is xaml
What is xaml
 
Xml Security
Xml SecurityXml Security
Xml Security
 
Xml builderの紹介
Xml builderの紹介Xml builderの紹介
Xml builderの紹介
 
夜子まま塾講義7(androidの画面デザイン1)
夜子まま塾講義7(androidの画面デザイン1)夜子まま塾講義7(androidの画面デザイン1)
夜子まま塾講義7(androidの画面デザイン1)
 
20090528 open seminar @ okayama
20090528 open seminar @ okayama20090528 open seminar @ okayama
20090528 open seminar @ okayama
 
『はじめてのXSLT 』小林 信次
『はじめてのXSLT 』小林 信次『はじめてのXSLT 』小林 信次
『はじめてのXSLT 』小林 信次
 
WebDAV, ATOM, and REST
WebDAV, ATOM, and RESTWebDAV, ATOM, and REST
WebDAV, ATOM, and REST
 
Tech.G HTML5 プレ講座
Tech.G HTML5 プレ講座Tech.G HTML5 プレ講座
Tech.G HTML5 プレ講座
 
Flex入門
Flex入門Flex入門
Flex入門
 

Mais de hasegawa

Mais de hasegawa (11)

Midterm2nd
Midterm2ndMidterm2nd
Midterm2nd
 
Objc03 1
Objc03 1Objc03 1
Objc03 1
 
Objc05
Objc05Objc05
Objc05
 
Objc03 2
Objc03 2Objc03 2
Objc03 2
 
Objc01
Objc01Objc01
Objc01
 
Cocoa Pro09
Cocoa Pro09Cocoa Pro09
Cocoa Pro09
 
Cocoa Pro6
Cocoa Pro6Cocoa Pro6
Cocoa Pro6
 
Cocoa Pro5
Cocoa Pro5Cocoa Pro5
Cocoa Pro5
 
Cocoa Pro4
Cocoa Pro4Cocoa Pro4
Cocoa Pro4
 
Cocoa Pro03
Cocoa Pro03Cocoa Pro03
Cocoa Pro03
 
CocoaPro02
CocoaPro02CocoaPro02
CocoaPro02
 

Cocoa Pro08