第34回php勉強会発表資料 simplexml

74
Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons ちょっと極めるXML on PHP5 id:sotarok Sotaro KARASAWA [email protected]

Upload: sotaro-karasawa

Post on 07-Nov-2014

5.493 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

ちょっと極めるXML on PHP5

id:sotarokSotaro [email protected]

Page 2: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

あいかわらず遅刻しててすみません

別に世の中なめてるわけじゃ><

Page 3: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

Agenda

自己紹介

PHP5 の XML の機能を紹介SimpleXMLを調理するもっとSimpleXMLを使う

もっとXML

Page 4: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

自己紹介

id:sotarokそーたろー

kはおまけDjango の D みたいなもん

Page 5: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

このアイコンにピンときたら

twitter.com/sotarokd.hatena.ne.jp/sotarok

その他

Page 6: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

自己紹介

PHPカンファレンス2008は

7/21です!

みんなきてね!

Page 7: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

PHP5 の XML の機能

XMLって知ってますよね?<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Page 8: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

これまでのPHP

xmlparserPEAR

Page 9: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

PHP5ではXMLを扱う機能が

大幅に強化されています

Page 10: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

詳しくは@IThttp://www.atmarkit.co.jp/flinux/rensai/p

hp502/php502a.html

by yudoufu

Page 11: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

これぞ

まるなげPHP!

Page 12: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

という冗談はおいといて

Page 13: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

PHP5 の XML を扱う機能

SimpleXMLXMLReader/WriterDOMDocument

SDOXSL…

Page 14: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

まぁこんなにあっても

しょうがないので

Page 15: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

とりあえず

SimpleXML

Page 16: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

SimpleXMLを調理する

Page 17: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

インスタンスの生成

simplexml_load_string($some_string);new SimpleXMLElement($some_string);

文字列から

ファイル・URLから

simplexml_load_file($some_file);new SimpleXMLElement($some_file,

null, true);

Page 18: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

要素へのアクセス

$xml->channel

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0“ xml:lang="ja">

<channel><title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Page 19: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

要素へのアクセス

$xml->channel->title

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0“ xml:lang="ja">

<channel><title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Page 20: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

要素へのアクセス

$xml->channel->link

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0“ xml:lang="ja">

<channel><title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Page 21: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DEMO

RSSからタイトル一覧を取得する

Page 22: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

4行

Page 23: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

ちなみにこうすると3行

<?php

foreach (simplexml_load_file("rss2.xml")->channel->item as $val) {

echo $val->title . "¥n";}

Page 24: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

属性へのアクセス

$xml->attributes()->version

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0“ xml:lang="ja">

<channel><title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Page 25: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

(こんな風にもアクセスできます)(記号とかが入ってたら{“”}で囲む)

$xml->{“@attributes”}->version

Page 26: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

名前空間付き要素へのアクセス

xml namespace<?xml version="1.0" encoding="utf-8" ?><rss version="2.0“

xmlns:dc="http://purl.org/dc/elements/1.1/“xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link> <description>GRANADA Hatena @ sotarok</description> <dc:creator>sotarok</dc:creator>

Page 27: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

$xml->channel->{“dc:creator”}

Page 28: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

$xml->channel->children(“http://purl.org/dc/elements/1.1/”)->creator

名前空間付き要素へのアクセス

Page 29: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

xpath

xpathしってますかー?

Page 30: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

xpath

XPath は、XML ドキュメントの一部をアドレッシングするための言語であり、XSLT および XPointer で使用するように設計されている。

http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm

Page 31: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

代表的なxpath式

id(‘ID’)//hoge

//hoge/@fuga//hoge[@fuga]

idがIDである要素hogeノードhogeノードのfuga属性hogeノードで属性fuga有

Page 32: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DEMO

xpathを使ってRSSからタイトル一覧を取得

Page 33: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

ここまでがSimpleXMLの基本的な機能(だいたい)

書き込む方の紹介してないけど

Page 34: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

もっとSimpleXMLを使う

Page 35: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DOMDocumentと連携して簡単にスクレイピング

Page 36: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DOMDocument ⇔ SimpleXML自在に変換可能

simplexml_import_domdom_import_simplexml

Page 37: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DEMO

DOMDocumentとxpathを使ってTwitterから発言一覧を取り出す

Page 38: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

ちょっとしたチューニング

Page 39: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

インスタンス生成時のオプション

$xml = simplexml_load_string($some_string, ‘SimpleXMLElement’,LIBXML_COMPACT

);

Page 40: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DEMO

LIBXML_COMPACT使った場合と使っていない場合の比較

Page 41: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

ただまぁ

スペックの高いマシンでは

ほとんど差がでませんでした

Page 42: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

SimpleXMLIterator

Page 43: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

インスタンス生成時のオプション

$xml = simplexml_load_string($some_string, ‘SimpleXMLIterator’

);

Page 44: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

なにが違うか

ちょっとサンプル

Page 45: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

つーかこういう使い方しちゃだめ

$xml->hogehoge[$i]->fugafuga

Page 46: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

とかちゃんと調べずに言ってますが,

今度余裕があれば中身まで

だれか...(ぉ

Page 47: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

XMLReader

Page 48: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

結論から言えば

Page 49: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

存在価値のわからないモジュール

Page 50: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

というのはちょっと言いすぎで

Page 51: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

そのまえに

DOMの復習

Page 52: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

ノードタイプノードタイプノードタイプノードタイプ

Page 53: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

開始開始開始開始ノードノードノードノード

Page 54: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Significant Whitespaceノードノードノードノード

Page 55: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

開始開始開始開始ノードノードノードノード

Page 56: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Significant Whitespaceノードノードノードノード

Page 57: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

開始開始開始開始ノードノードノードノード

Page 58: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

テキストノードテキストノードテキストノードテキストノード

Page 59: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

カーソル

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0"

xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:content="http://purl.org/rss/1.0/modules/content

/" xml:lang="ja"><channel>

<title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

終了終了終了終了ノードノードノードノード

Page 60: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

という風に進みます・・・

Page 61: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

とりあえず使ってみる

$xml = new XMLReader();$xml->open(“rss2.xml”);

Page 62: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

要素はプロパティに入っている

echo $xml->name;echo $xml->value;

Page 63: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

DEMO

カーソルの動き方

Page 64: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

たぶん

まじめに仕様にしたがってやったら

XMLReaderなんだろうなー

Page 65: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

でもそこはPHP

PHP=

ラッパー・テンプレート言語

Page 66: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

SimpleXMLだと$xml->channel->title

<?xml version=“1.0” encoding=“utf-8” ?><rss version="2.0“ xml:lang="ja">

<channel><title>GRANADA Hatena @ sotarok</title><link>http://d.hatena.ne.jp/sotarok/</link>

...

Page 67: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

楽チン

Page 68: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

そういうわけで

存在価(r

Page 69: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

メリット(たぶん)

メモリ使用量

(実行速度は若干遅)

Page 70: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

XMLReaderについてはサンプルはネット上に

あまりころがっていない

(IBMのサイトに良い記事あった!)

Page 71: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

まぁマニュアル見ればOK(結構充実している)

Page 72: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

まとめ

Page 73: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

PHP5でのXMLの機能はかなり強い

SimpleXML -> 早い・簡単XMLReader -> がんばる

Page 74: 第34回PHP勉強会発表資料 SimpleXML

Copyright (c) sotarok 2008, Attribution-NonCommercial Creative Commons

おわり