如何搜索XML文件's内容类似于MySQL查询


How to search an XML file's content similar to a MySQL query?

我可以像这样简单地读取数组中xml文件的输入:

  <?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==

并将结果返回给数组或其他东西

XPATH就是我想要的。

例如,O'Reilly出版的所有书籍:

<?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更容易学习,但绝不是"看几分钟就搞定了"的,如果您的需求比基础知识更复杂,您真的必须学习它。

如果使用SimpleXML而不是DOMDocument解析文档,则可以使用xpath在文档中查找元素。我不知道这是否完全符合您的需求,但我之前做过一些非常复杂的动态路径(查询):

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