2011-07-19 7 views
0

私は単純に、このような配列でxmlファイルの入力を読み取ることができます。XMLファイルの内容をMySQLクエリと同様に検索するには?

<?php 
    $doc = new DOMDocument(); 
    $doc->load('books.xml'); 

    $books = $doc->getElementsByTagName("book"); 
    foreach($books as $book) 
    { 
    $authors = $book->getElementsByTagName("author"); 
    $author = $authors->item(0)->nodeValue; 

    $publishers = $book->getElementsByTagName("publisher"); 
    $publisher = $publishers->item(0)->nodeValue; 

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

    echo "$title - $author - $publisher\n"; 
    } 
    ?> 

そして例にxmlファイルをすることができますこのような何か:

<books> 
    <book> 
    <author>Jack Herrington</author> 
    <title>PHP Hacks</title> 
    <publisher>O'Reilly</publisher> 
    </book> 
    <book> 
    <author>Jack Herrington</author> 
    <title>Podcasting Hacks</title> 
    <publisher>O'Reilly</publisher> 
    </book> 
    </books> 

をしかし、私が一致する場合特定のレベルでは、mySqlのような一致する要素の数を調べる場合は、LIKEまたは==があるとします。

、配列か何か

答えて

2

XPATHに結果を返すには、私が考えるあなたが探しているものです。

たとえば、オライリーによって公開すべての書籍:

<?php 
$doc = new DOMDocument(); 
$doc->load('/tmp/books.xml'); 
$x = new DOMXPath($doc); 
foreach($x->query('//book[publisher="O\'Reilly"]') as $book){ 
    echo $book->ownerDocument->saveXML($book); 
} 
//If you only want the count: 
echo $x->evaluate('count(//book[publisher="O\'Reilly"])'); 

XPathは、その後SQLを学ぶことが私の意見は、より簡単ですが、決しては「数分間それを見て、あなた'完了'、あなたは本当にあなたのニーズがより基本的な複雑な場合はそれを学ぶ必要があります。

+0

例下さい:私は家のルックスを取得するときにD – kritya

+0

は病気に確実にそれをテストそれは動作します。ありがとう – kritya

0

DOMDocumentではなくSimpleXMLを使用してドキュメントを解析する場合は、xpathを使用してドキュメント内の要素を見つけることができます。これはまさにあなたのニーズにマッチするかどうかはわからないが、私は前にいくつかのかなり複雑で動的なパス(クエリ)を行っている:

http://php.net/manual/en/simplexmlelement.xpath.php

+0

私が得ることができるのは、レベルのキーを検索することですしかし、私が望むのは、コンテンツを検索することです – kritya

関連する問題