XML操作libxml関数
- 定義済み定数
- libXMLError クラス
- libxml_clear_errors
〔libxmlエラーハンドラをクリアする〕
- libxml_get_errors
〔エラー配列を取得する〕
- libxml_get_last_error
〔libxmlから直近のエラーを取得する〕
- libxml_set_streams_context
〔次のlibxmlドキュメントの読込/書きこみのためにストリームコンテキストを設定する〕
- libxml_use_internal_errors
〔libxmlエラーを無効にし、ユーザが必要に応じてエラー情報を取得できるようにする〕
定義済み定数
unknown
libxmlでは、下記の定数が定義されています。
定義済み定数 | 型 | 説明 |
---|---|---|
LIBXML_COMPACT | integer | 小さなノードを割り当てるように最適化。アプリケーションのコードを変更することなしに高速化することが可能。(Libxml v2.6.21~) |
LIBXML_DTDATTR | integer | デフォルトのDTD属性。 |
LIBXML_DTDLOAD | integer | 外部サブセットをロードする。 |
LIBXML_DTDVALID | integer | DTDで検証。 |
LIBXML_NOBLANKS | integer | 空白のノードを削除。 |
LIBXML_NOCDATA | integer | CDATAをテキストノードとしてマージ。 |
LIBXML_NOEMPTYTAG | integer | 空タグを拡張する。例えば<br /> を<br></br> にする。※DOMDocument::saveおよびDOMDocument::saveXML関数でのみ有効。 |
LIBXML_NOENT | integer | エンティティを置換。 |
LIBXML_NOERROR | integer | エラー出力を制御。 |
LIBXML_NONET | integer | ドキュメントロード時にネットワークアクセスを無効にする。 |
LIBXML_NOWARNING | integer | 警告出力を抑制する。 |
LIBXML_NOXMLDECL | integer | ドキュメントの保存時にXML宣言を削除する。(Libxml v2.6.21~) |
LIBXML_NSCLEAN | integer | 冗長な名前空間宣言を削除。 |
LIBXML_XINCLUDE | integer | XInclude置換を実装する。 |
LIBXML_ERR_ERROR | integer | 復帰可能なエラー。 |
LIBXML_ERR_FATAL | integer | 致命的なエラー 。 |
LIBXML_ERR_NONE | integer | エラーなし。 |
LIBXML_ERR_WARNING | integer | 単純な警告。 |
LIBXML_VERSION | integer | 20605や20617のようなlibxml バージョン。 |
LIBXML_DOTTED_VERSION | integer | 2.6.5または2.6.17のようなlibxmlのバージョン。 |
libXMLError クラス
unknown
libXMLErrorクラスは、libxmlが無視するエラーについてのさまざまな情報を含みます。
クラスの概要
ibXMLError {
/* プロパティ */
public int $level ;
public int $code ;
public int $column ;
public string $message ;
public string $file ;
public int $line ;
}
プロパティ
プロパティ | 説明 |
---|---|
level | エラーの深刻度。下記の定数のいずれか。
|
code | エラーコード。 |
column | エラーが発生した列。※このプロパティはlibxmlで完全には実装されていないため、0が返されることがあります。 |
message | エラーメッセージ。 |
file | ファイル名。XMLを文字列から読み込んだ場合は空文字列。 |
line | エラーが発生した行。 |
libxml_clear_errors 
libxmlエラーハンドラをクリアする
unknown
void libxml_clear_errors ( void )
libxmlエラーハンドルのバッファをクリアします。 返り値はありません。
<?
# ユーザーによるエラー処理を有効にする
var_dump(libxml_use_internal_errors(true)); // // bool(false)
# 存在しないファイルを指定
$xml=simplexml_load_file('dedmo/book.xml');
if(!$xml){
# エラー配列を取得する
$errors=libxml_get_errors();
print_r($errors);
# libxmlエラーハンドラをクリアする
libxml_clear_errors();
}
/*
bool(false)
Array
(
[0] => LibXMLError Object
(
[level] => 1
[code] => 1549
[column] => 0
[message] => failed to load external entity "dedmo/book.xml"
[file] =>
[line] => 0
)
)
*/
?>
libxml_get_errors 
エラー配列を取得する
unknown
array libxml_get_errors ( void )
エラー配列を取得します。 エラーがバッファにある場合にLibXMLErrorオブジェクトの配列、それ以外の場合に空の配列を返します。
<?
# 簡単な libxml エラーハンドラを構築する方法
libxml_use_internal_errors(true);
$xmlstr=<<< XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<titles>PHP: Behind the Parser</title>
</movie>
</movies>
XML;
$doc=simplexml_load_string($xmlstr);
$xml=explode("\n", $xmlstr);
if(!$doc){
$errors=libxml_get_errors();
foreach ($errors as $error) {
echo display_xml_error($error, $xml);
}
libxml_clear_errors();
}
function display_xml_error($error, $xml){
$return=$xml[$error->line - 1] . "\n";
$return.=str_repeat('-', $error->column) . "^\n";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return.="Warning $error->code: ";
break;
case LIBXML_ERR_ERROR:
$return.="Error $error->code: ";
break;
case LIBXML_ERR_FATAL:
$return.="Fatal Error $error->code: ";
break;
}
$return.=trim($error->message) .
"\n Line: $error->line" .
"\n Column: $error->column";
if ($error->file){
$return.="\n File: $error->file";
}
return "$return\n\n--------------------------------------------\n\n";
}
/*
<titles>PHP: Behind the Parser</title>
----------------------------------------------^
Fatal Error 76: Opening and ending tag mismatch: titles line 4 and title
Line: 4
Column: 46
--------------------------------------------
x*/
?>
libxml_get_last_error 
libxmlから直近のエラーを取得する
unknown
libXMLError libxml_get_last_error ( void )
libxmlから直近のエラーを取得します。 エラーがバッファにある場合にLibXMLErrorオブジェクト、それ以外の場合にFALSEを返します。
libxml_set_streams_context 
次のlibxmlドキュメントの読込/書きこみのためにストリームコンテキストを設定する
unknown
void libxml_set_streams_context ( resource $ストリームコンテキスト )
次のlibxmlドキュメントの読込/書込のためにストリームコンテキストを設定します。 返り値はありません。
オプションの第1引数ストリームコンテキストリソースには、strem_context_create()で作成したストリームコンテキストを指定します。
<?
$opts=array(
'http' => array(
'user_agent' => 'PHP libxml agent',
)
);
$context=stream_context_create($opts);
libxml_set_streams_context($context);
# HTTPによりファイルをリクエスト
$doc = new DOMDocument();
$doc->load('/content/demo/book.xml');
echo $doc->saveXML();
?>
libxml_use_internal_errors 
libxmlエラーを無効にし、ユーザが必要に応じてエラー情報を取得できるようにする
unknown
bool libxml_use_internal_errors ( [ bool $use_errors=false ] )
標準のlibxmlエラーを無効にし、ユーザーが必要に応じてエラー情報を取得できるようにします。 返り値として、use_errorsの前の値を返します。
オプションの第1引数use_errorsには、ユーザーによるエラー処理を有効にするかどうかの有無を指定します。 デフォルトはFALSE(無効)です。
<?
# ユーザーによるエラー処理を有効にする
var_dump(libxml_use_internal_errors(true)); // // bool(false)
# 存在しないファイルを指定
$xml=simplexml_load_file('dedmo/book.xml');
if(!$xml){
# エラー配列を取得する
$errors=libxml_get_errors();
print_r($errors);
# libxmlエラーハンドラをクリアする
libxml_clear_errors();
}
/*
bool(false)
Array
(
[0] => LibXMLError Object
(
[level] => 1
[code] => 1549
[column] => 0
[message] => failed to load external entity "dedmo/book.xml"
[file] =>
[line] => 0
)
)
*/
?>