XML DBだからできること:HTMLをDBにそのまま保存

鵜飼寛太(サイバーテック)
2008-03-19 18:30:00
  • このエントリーをはてなブックマークに追加

ストア用のPHPスクリプトを用意

対象のファイルが整形されたXML文書(xhtmlで記述されたファイル)の場合、次のスクリプトでneoCoreへストアできる。

<?php
/**
 * 
 */
// neoCore関数のインクルード
    include('neoCore.functions.php');
// neoCoreセッション開始
    $sid = getsession("userid", md5("password"));
// xml文書の保存
    $result = store($sid, file_get_contents("test.html"));
// neoCoreセッションの終了
    endsession($sid);
// 
#    header('Content-type: text/xml');
// 結果の表示
#    echo $result;
?>

※useridとpasswordは環境に合わせて適宜書き換えのこと

 filegetcontentsの引数でストアするhtmlファイルを指定しているので、この引数を変更すれば他のhtmlファイルをストアできる。

 実際はxhtmlで書かれていることは少ない(meta、br、input等が閉じられていない事が多い)ので念のためxhtml化し、加えてトランザクション管理を実装すると以下のようになる。

<?php
/**
 * 
 */
// neoCore関数のインクルード
    include('neoCore.functions.php');
// DOMDocumentのインスタンスを生成
    $doc = new DOMDocument();
// 余計な空白を削除
    $doc->preserveWhiteSpace = false;
// htmlファイルの読み込み
    $doc->loadHTMLFile("test.html");
// XML文書化
    $xml = $doc->saveXML();
// neoCoreセッション開始
    $sid = getsession("userid", md5("password"));
// トランザクションの開始
    transaction_start($sid);
// xml文書の保存
    $result = store($sid, $xml);
// トランザクションの終了
    transaction_commit($sid);
// neoCoreセッションの終了
    endsession($sid);
// 
    header('Content-type: text/xml');
// 結果の表示
    echo $result;
?>

 loadHTMLFileメソッドで保存対象のhtml をDOMDocumentにする。

 これはloadHTMLFileメソッド(およびloadHtmlメソッド)の仕様で整形されたhtmlでなくてもパースできる事を利用している。

 この際、妥当でない箇所はPHPのxmlパーサーの解釈によって補てんされるので意図しない結果になる可能性がある。

  • 新着記事
  • 特集
  • ブログ