ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルを使用した XML DOM の読み取りと書き込みのコード例

PHP_PHP チュートリアルを使用した XML DOM の読み取りと書き込みのコード例

WBOY
WBOYオリジナル
2016-07-21 14:54:25932ブラウズ

// DOM を使用して XML を読み取る
$doc = new DOMDocument()
$doc->load(‘test.xml’);

$books = $doc->getElementsByTagName(“本”);

foreach( $books as $book ){

$authors = $book->getElementsByTagName(“author”);
$author = $authors->item(0)->nodeValue 属性は次のとおりです。ノードの値を設定または返すノードのタイプに従って決定されます。

$publisher = $book->getElementsByTagName(“publisher”);

$publisher = $publishers->item(0)->nodeValue;
$titles = $book->getElementsByTagName( ”title” );

$title = $titles->item(0)->nodeValue;

エコー「タイトル: $title
著者: $author
出版社: $publisher




/*

スクリプトは最初に新しい DOMdocument オブジェクトを作成し、load メソッドを使用して書籍 XML をこのオブジェクトにロードします。その後、スクリプトは getElementsByName メソッドを使用して、指定された名前の下にあるすべての要素のリストを取得します。

book ノードのループで、スクリプトは getElementsByName メソッドを使用して、著者、発行者、およびタイトル タグのノード値を取得します。 nodeValue はノード内のテキストです。次に、スクリプトはこれらの値を表示します。
*/

// SAX パーサーで XML を読み取る

$g_books = 配列();
$g_elem = null;

function startElement( $parser, $name, $attrs ){

global $g_books, $g_elem;

if ( $name == 'BOOK' ) $g_books []= array(); }


関数 endElement( $parser, $name ){

グローバル $g_elem = null;

function textData( $parser, $text ){
global $g_books, $g_elem;
if ( $g_elem == '作者' || $g_elem == '出版社' || $g_elem == 'TITLE' ){
$g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;
$parser = xml_parser_create();

xml_set_element_handler( $parser, ”startElement”, ”endElement” );

xml_set_character_data_handler( $parser, ”textData” );
$f = fopen( 'test.xml', 'r' );
while( $data = fread( $f, 4096 ) ){
xml_parse( $parser, $data );

xml_parser_free( $parser );

foreach( $g_books as $book ){
echo $book['TITLE']." - ".$book['AUTHOR']." - ";
echo $book['PUBLISHER']."n";
}

/*

スクリプトは最初に、メモリ内のすべての書籍と書籍情報を保持する g_books 配列を設定します。また、g_elem 変数は、スクリプトが現在処理しているタグの名前を保持します。次に、スクリプトはコールバック関数を定義します。この例では、コールバック関数は startElement、endElement、および textData です。マークを開くときと閉じるときは、それぞれ startElement 関数と endElement 関数を呼び出します。開始タグと終了タグの間のテキストで textData を呼び出します。

この例では、startElement タグは book 配列内の新しい要素を開始する book タグを探します。次に、textData 関数は現在の要素を調べて、それが発行者、タイトル、または著者タグであるかどうかを確認します。そうである場合、関数は現在のテキストを現在のブックに挿入します。

解析を続行できるようにするために、スクリプトは xml_parser_create 関数を使用してパーサーを作成します。次に、コールバック ハンドルを設定します。その後、スクリプトはファイルを読み取り、ファイルのチャンクをパーサーに送信します。ファイルが読み取られた後、xml_parser_free 関数によってパーサーが削除されます。スクリプトの最後では、g_books 配列の内容が出力されます。

*/


// 正規表現を使用して XML を解析します

$xml = ””;

$f = fopen( 'test.xml', 'r' );

while( $data = fread( $f, 4096 ) ) { $xml .= $data; $f );

preg_match_all( ”/(.*?)/s”, $xml, $bookblocks );
foreach( $bookblocks[1] as $block ){
preg_match_all( ”/(.*?)/”, $block, $author ); ;(.*?)/”, $block, $title );
preg_match_all( ”/(.*?)/”, $block, $publisher );

echo( $title[1][0].” - ”.$author[1][0].” - ”. $publisher[1][0].”n” );

/*

XML を読み取るために正規表現を使用することはお勧めしませんが、正規表現関数が常に使用できるため、これが最も互換性のある方法である場合があります。 XML の形式や構造を制御できないため、正規表現を使用してユーザーから XML を直接読み取らないでください。ユーザーから XML を読み取るには、常に DOM ライブラリまたは SAX パーサーを使用する必要があります。

*/

//DOM を使用して XML を記述する

$books = array();
$books [] = array(
'title' => 'PHP Hacks',
'author' => 'ジャック・ヘリントン',
'出版社' => ”オライリー”
);
$books [] = array(
'title' => 'ポッドキャスティングハック',
'著者' => 'ジャック・ヘリントン',
'出版社' => ”オライリー”
);

$doc = 新しい DOMDocument();
$doc->formatOutput = true;

$r = $doc->createElement( ”books” );
$doc->appendChild( $r );

foreach( $books as $book ){
$b = $doc->createElement( ”book” );

$author = $doc->createElement( ”著者” );
$author->appendChild( $doc->createTextNode( $book['author'] ) );

$b->appendChild( $author );

$title = $doc->createElement( ”title” );
$title->appendChild( $doc->createTextNode( $book['title'] ) );

$b->appendChild( $title );

$publisher = $doc->createElement( ”publisher” );
$publisher->appendChild( $doc->createTextNode( $book['publisher'] ) );

$b->appendChild( $publisher );
$r->appendChild( $b );
}

//echo $doc->saveXML();

/*
いくつかの例の図を使用してブックの数が組み込まれています。このデータは、ユーザーから取得することも、データ パックから取得することもできます。次に、各本の著者、タイトル、出版社が作成され、各ブック ポイントがルート ポイント ブックに追加されます。作成された XML はすべて正しい形式です。ただし、DOM を使用して XML を作成できない場合、これは問題になりますか?

Xml代コード

PHP 编写xml

$books = array();

$books [] = array(

'title' => 'PHP Hacks',
'author' => 'ジャック・ヘリントン',
'出版社' => ”オライリー”
);
$books [] = array(
'title' => 'ポッドキャスティングハック',
'著者' => 'ジャック・ヘリントン',
'出版社' => ”オライリー”
);
?>

foreach( $books as $book )
{
?>

<?php echo( $book['title'] ); ?>
<著者>




}
?>


例で使用される te​​st.xml は次のとおりです:


<著者>ジャック・ヘリントン
PHP ハック - bkjia.com
オライリー出版社>


<著者>ジャック・ヘリントン

ポッドキャスティングのハック
オライリー出版社>



http://www.bkjia.com/PHPjc/364615.html

本当http://www.bkjia.com/PHPjc/364615.html技術記事 // DOM を使用して XML を取得 $doc = new DOMDocument(); $doc-load(test.xml); $books = $doc-getElementsByTagName(book); foreach( $books as $book ){ $authors = $book-getElementsByTagName(auth...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。