<?xml version="1.0" encoding="gb2312"?>
<books>
  <book id="1">
  <author>Jack Chen</author>
  <title>PHP Hacks</title>
  <publisher>O'Reilly</publisher>
  </book>
  <book id="2">
  <author>Jack Herrington</author>
  <title>Podcasting Hacks</title>
  <publisher>O'Reilly</publisher>
  </book>
</books>
我有这样的一个XML文件
我用的是PHP DOMDocument解析
现在我想知道怎么通过book 中的id值来列出这一节点下的所有值?
也就是说,我现在想显示出
id=1的book内
author,title,publisher所有信息?

解决方案 »

  1.   

      <?php
      $doc = new DOMDocument();
      $doc->load( 'books.xml' );
      
      $book = $doc->getElementsById( "1" );
      $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";
      ?>
      

  2.   


    <?xml version="1.0" encoding="gb2312"?>
    <books>
      <book par="a">
      <author>Jack Chen</author>
      <title>PHP Hacks</title>
      <publisher>O'Reilly</publisher>
      </book>
      <book par="b">
      <author>Jack Herrington</author>
      <title>Podcasting Hacks</title>
      <publisher>O'Reilly</publisher>
      </book>
    </books>那我要是把属性名换成别的呢?
    把id换成par的话,也是用getElementsById()吗
      

  3.   

    DOMXPath
    是另一个类吗?一般的PHP版本是否都兼容这个东西?还有,能功烦你给个示demo吗?
      

  4.   

    $doc = new DOMDocument;$doc->load('book.xml');$xpath = new DOMXPath($doc);$tbody = $doc->getElementsByTagName('tbody')->item(0);// our query is relative to the tbody node
    $query = 'count(row/entry[. = "en"])';$entries = $xpath->evaluate($query, $tbody);
    echo "There are $entries english books\n";
      

  5.   

    本帖最后由 xuzuning 于 2010-01-05 16:06:06 编辑
      

  6.   

    xuzuning
    的回答真的很详细,正是我需要的,不过不好意思结贴的时候没有看到你回答,我要另开贴送你分。请接收