Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
iPhone輪講第8回
Lesson15
Lesson15
XMLとRSS
XML
XMLとは
HTMLのようにタグを使ってマーク付けする言語を
マークアップ言語(Markup Language)と呼ぶ
XMLもタグによるマークアップ言語のひとつ
HTMLはWebページ専用にデザインされているが,XMLは色々なものに
...
DOMパーサ
DOM(Document Object Model)パーサ
XMLがもつ構造をそのままプログラムから操作できるようにしたもの
XMLのタグ同士の階層関係の事を木構造と呼ぶ
木構造を直接操作できるのがDOMパーサ
rss
link
...
SAXパーサ
SAX(Simple API for XML)パーサ
XMLドキュメントを上から読み上げるように処理する
RSSファイル読み上げてみる
『まずrssのタグが来た,次にchannnelのタグが来た,titleのタグが来た,
タイトル...
SAXパーサ
何かを読むたびにレポートが上がってくるので,
「イベント駆動型パーサ」とも呼ばれる
<rss>
<channel>
<title>
ホットニュース
</title>
<link>
http://...
</link>
</chan...
木構造
DOMタイプのパーサを使う場合
ポイントとなるのが木構造
木構造は木のような格好をしている構造
根(root),幹(trunk),葉(leaf)
がある
特に根の事はルートと呼ぶ事が多い
根(root)
幹(trunk)
葉(leaf)
木構造
根や幹や葉の事をまとめてノード
(node)と呼ぶ
木構造ではノード同士の関係も重要
自分よりも上(ルートに近い方)にあ
るノードを親(parent),
下にあるのが子(child)
隣の(同じ親を持っている)ノードの
ことは兄弟(si...
木構造
子になるノードは複数いる可能性があ
る.それに対して親ノードは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と
いう使用をサポー...
SAXパーサのためのNSXMLクラス
SAXパーサのためのクラスは
NSXParser
NSObject
NSXMLNode
XMLドキュメントのパース
XMLドキュメントをパースする
パースにはNSXMLDocumentクラスを使う
以下の初期化メソッドを使うとパースが始まる
NSDocument
- (id)initWithContentsOfURL:(NSURL...
XMLドキュメントのパース
XMLドキュメントをパースする
オプションには以下の値を指定できる
NSXMLDocumentTidyXMLを使うと,HTMLもXMLのようにパースできる
これができるとHTMLのタグで木構造で扱える
定数 説明
N...
XPath
XMLドキュメントをパースしたら次はそこから
ノードを取り出す
ノードを取り出すもっとも単純な方法は親子関係を辿って行く事
まずルートノードを取得して,その子を取り出して,さらにその子を取り出
して…を繰り返して行く
XPath
RSSのタイトルを取り出すとする
rssノードの下の,channelノードの下の
titleノードが含むテキストファイル
/rss/channel/titleと書いたら
わかりやすい
rss
title
channel
link
d...
XPath
XMLではあるノードの位置をパスとして書き出す規格として
Xpathと呼ばれるものがある
NSXMLにもXPathを指定してノードを取得する
nondesForXpath:errorというメソッドがある
NSXMLNode
- (N...
ノードの情報
ノードを取得したら,そのノードに関するいろいろな情報を取得する
NSXMLNode
- (NSXMLNodeKind)kind
ノードの種類を取得する用意されている種類は,NSXMLInvalidKind, NSXMLDocume...
これらのメソッドから何が取得でき
るのか
次のようなXMLを考える
これをパースするとtitleのタグと,その
下にテキストノードとが出来上がる
titleノードからメソッドを使って情報を
取得する
<title>楽しいCocoa</title...
ノードの親子関係
あるノードから親,子,兄弟といった関係にあるノードを取得する事ができる
NSXMLNode
- (NSXMLNode*)parent
親ノードを取得する
- (unsigned int)childCount
子ノードの数を取得...
ノードの親子関係
previousSibling
parent
childAtIndex:
nextSibling
children
childCount
XMLドキュメントの関係
それぞれのノードからはそのノードが属しているNSXMLDocumentのインス
タンスを取得する事ができる
NSXMLDocumentからはルートノードを取得できる
NSXMLNode
- (NSXMLDocument...
属性値の取得
XMLではタグの中に値を指定する事ができる
これを属性と呼ぶ
type = string というところが属性
typeのところを属性名, string のことを属性値と呼ぶ
<title type = string > </tit...
属性値の取得
ノードから属性を取得するメソッドはNSXMLElementにある
どちらも取得できるのはノードである事に注意
これは属性ノードになる
NSXMLElement
- (NSXMLNode*)attributeForName:(NSS...
おわり
Upcoming SlideShare
Loading in …5
×

Cocoa Pro08

871 views

Published on

  • Be the first to comment

  • Be the first to like this

Cocoa Pro08

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

×