Почему мой код неправильно анализирует этот файл XML?

Я пытаюсь проанализировать файл журнала xml в PHP. Он имеет следующую структуру

 <log>
 <logentry revision="1745">
 <author>abc</author> 
  <date>2010-08-31T20:46:29.691125Z</date> 
 <paths>
  <path kind="" action="M">/trunk/myserver/abc.java</path> 
  <path kind="" action="M">/trunk/myserver/test.java</path> 
  <path kind="" action="M">/trunk/myserver/xmltest.java</path> 
  </paths>
  <msg>how to make it work!</msg> 
  </logentry>
</log>

Как я могу извлечь все данные из этого XML-файла? Как зациклить файл журнала для извлечения всех данных? Я тоже хочу получить эту М от действия.

Я тоже пробовал этот код, но не смог заставить его работать для всего файла.

$xml = simplexml_load_file("test.log");

echo $xml->getName();


foreach($xml->children() as $child)
  {
    echo $child->getName() . ": " . $child . "<br />";
  }

person Tweet    schedule 17.12.2010    source источник
comment
@user431276 user431276 - Первый ответ уже показал вам, как использовать simplexml ...   -  person ajreal    schedule 17.12.2010
comment
Почему вы не копируете код RageZ? Вы, кажется, пропустили $xmlobj = new SimpleXMLElement($xml);   -  person Geoffrey    schedule 17.12.2010


Ответы (2)


вы можете использовать simplexml для этой цели

$xmlStr = <<<XML
<log>
 <logentry revision="1745">
 <author>abc</author> 
  <date>2010-08-31T20:46:29.691125Z</date> 
 <paths>
  <path kind="" action="M">/trunk/myserver/abc.java</path> 
  <path kind="" action="M">/trunk/myserver/test.java</path> 
  <path kind="" action="M">/trunk/myserver/xmltest.java</path> 
  </paths>
  <msg>how to make it work!</msg> 
  </logentry>
</log>
XML;

$xml = new SimpleXMLElement($xmlStr);
foreach($xml->logentry as $entry){
   echo "revision: {$entry['revision']}" . PHP_EOL;
   echo "author: {$entry->author}" . PHP_EOL;
   echo "paths:" . PHP_EOL;
   foreach($entry->paths->path as $pa){
     echo "\t kind: {$pa['kind']} action: {$pa['action']} path: {$pa}" . PHP_EOL;
   }
   echo "message: {$entry->msg}" . PHP_EOL;
}
person RageZ    schedule 17.12.2010
comment
Возможно, используйте use ‹br /› вместо PHP_EOL. Также ‹pre› . \t..... В противном случае он не отображается в браузере должным образом. - person Geoffrey; 17.12.2010
comment
@Geoffrey: на самом деле я посещал скрипт, работающий в CLI ;-) - person RageZ; 17.12.2010

Используйте PHP-класс DOMDocument.

person Geoffrey    schedule 17.12.2010