【问题标题】:Why doesn't my code properly parse this XML file?为什么我的代码不能正确解析这个 XML 文件?
【发布时间】:2011-05-26 21:33:54
【问题描述】:

我正在尝试在 PHP 中解析一个 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 文件中提取所有数据?如何循环日志文件以提取所有数据?我也想从行动中得到那个 M。

我也试过这段代码,但我无法让它适用于整个文件。

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

echo $xml->getName();


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

【问题讨论】:

  • @user431276 - 第一个答案已经向您展示了如何使用 simplexml ...
  • 为什么不复制RageZ的代码?你好像漏掉了$xmlobj = new SimpleXMLElement($xml);

标签: php xml xml-parsing


【解决方案1】:

您可以为此目的使用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;
}

【讨论】:

  • 也许使用“
    ”,而不是 PHP_EOL。还有 "
    " 。 “\t....”。否则它不会在浏览器中按预期显示。
  • @Geoffrey:实际上我参加的是在 CLI 上运行的脚本 ;-)
【解决方案2】:

使用 PHP 的 DOMDocument 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多