1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

個人メモ@PHPでのXML

Last updated at Posted at 2017-07-19

#表題の件
タイトルの意図としてはDOMを想定して書いています。XMLについては多分一切触れません。
個人用のメモなので見難いと思いますが勉強の為に書き起こすので許してください。

#XMLを出力させるにはDOM
##DOMとは
DOMとは、Document Object Modelの略です。説明としては以下のようになっています。

XMLやHTMLで記述された文書をプログラムやスクリプトから参照あるいは操作するための方法を提供する仕組み。
XMLやHTMLで記述された文書の要素や属性を利用して構造化する方法などが定義されている。
DOMはDynamic HTMLで利用され、Webページ上の文字のスタイルを動的に変化させたり、表示後のWebページに画像を挿入したりするといったことを実現できる。
(出典:http://yougo.ascii.jp/caltar/DOM)

自分はHTML出力を容易に行いたいので最低限使えそうな事を記述していきます。
##phpでDOMを扱う
phpでこのDOMを扱うには次のようにオブジェクトを用いて扱う。
以下はhtml文を出力させる一例。

DOM
<?
    $doc = new DOMDocument('1.0');
    $root = $doc -> createElement('html');
    $root = $doc -> appendChild($root);
    $root = $doc -> createElement('head');
    $root = $doc -> appendChild($root);
    $root = $doc -> creadElement('title');
    $root = $doc -> appendChild($root);
    $text = $doc -> createTextNode('This is the title');
    $text = $title ->appendChild($root);

    echo $text -> saveHTML();

(出典:http://php.net/manual/ja/domdocument.savehtml.php)
echoで出力される文字列は以下のような出力になる。

sample
<html><head><title>This is the title</title></head></html>

##関数の役割
上記のコード内のそれぞれの関数の役割は見ればなんとなくわかると思うが、多分思ったことそのままだと思う。
new DOMDocument('1.0')はDOMDocumentオブジェクトを生成している。
このDOMDocumentのコンストラクタは次のようになっている。

DOMDocument
DOMDocument::__construct ([string $version,[string $encoding]])

(出典:http://php.net/manual/ja/domdocument.construct.php)
$versionXMLドキュメントのバージョン(上記の例だと1.0)、$encodingには生成するドキュメントのエンコーディングを指定する。

createElementはDOMDocument内にて定義されている関数で、次のようになっている。

createElement
public DOMElement DOMDocument::createElement (string $name [, string $value])

返り値の型になっているDOMElementは気にしなくていいと思う。というか調べたら分かるのでわざわざ深く(?)掘り下げるのは無駄だと思いました(理解していないため)。
$nameには追加する要素(htmlで言うところのタグ)を指定、$valueにはを指定する。

次はappendChild。これもコードを読んだらだいたい把握はつくのだが、実際に値として書き出していると思っていい(と思う)。
内容としては次のようになっている。

appendChild
public DOMNode DOMNode::apppendChild (DOMNode $newnode)

(出典:http://php.net/manual/en/domnode.appendchild.php)
イメージとしてはcreateElementで作成した値を$newnodeに設定してDOMDocumentオブジェクトに出力している感じ。

次はcreateTextNode。これも上記の例を見たらだいたいわかると思う。定義としては次の通り。

:createTextNode
public DOMText DOMDocument::createTextNode (string $content)

出典(http://php.net/manual/ja/domdocument.createtextnode.php)
DOMText型になっているが気にしなくていいかも。というかほぼ気にしてなくても大体流れさえあってれば動くから気になるなら調べる程度の認識でいい。気がする。
引数の$contentには値を記入。

最後にsaveHTML
これも上記の例でわかると思うが、指定したDOMDocumentを実際にhtmlとして書き出している。ファイルを保存したりするセーブとは少し違う意味のsaveかな。
まあ賢いフレンズさんはこんな事言わずとも理解できますが。。。
次のように定義されています。

:saveHTML
public string DOMDocument::saveHTML ([DOMNode $node = NULL])

出典(http://php.net/manual/ja/domdocument.savehtml.php)
引数は気にしたらだめっす。
#まとめ
phpでhtmlを綺麗に出したいなーと思った時、自前で関数を作成したりして出力させるのもありですが、DOMはかなり便利なので有効活用していきましょう。
既にある便利なモノは有効活用する。自分で作り出すのは後からでもいいんです。

正直これだけあれば普通にまともなhtml出せそうだなと思うから怖いけどそういう事は気にしたらダメかも。
過去に実際に動かしたような動かしてないような記憶がありますが、appendChildをしていくとどんどん入れ子になっていきます。
例えば、<span>test</span>をhtmlとして出力させたい時は

test
$dom = new DOMDocument('1.0');
$span = $dom->createElement('span');
$text = $dom->createTextNode('test');
$text = $span->appendChild($span);
echo $text->saveHTML();

とすればいいとも思います。動かしてないので動くかはわかりませんが動かなくても知りません。

総まとめとしては、htmlを扱うだけなら、
new DOMDocument
createElement
createTextNode
appendChild
saveHTML
を知っていればいいと思います。属性を指定するcreateAttrもありますが、同じような使い方なので今回は省きます。

以上です。あくまでも自分の頭の中の整理用のメモなので見辛いのは許してください。
閲覧有り難うございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?