【问题标题】:Loop is running twice while parsing xml in php在 php 中解析 xml 时循环运行了两次
【发布时间】:2013-09-26 18:06:31
【问题描述】:

我不太清楚为什么我的内部循环数据被添加到外部循环数据中-

我正在解析的 XML - http://pastebin.com/vGc5NhXr

我正在使用的代码 -

<?php

$dom = new DomDocument;

$dom->preserveWhiteSpace = FALSE;
$dom->load('course/Golf/imsmanifest.xml');

// get the resources element
$organization = $dom->getElementsByTagName( "item" );

  echo '<ul>';
  foreach( $organization as $organizationItem )
  {

  $unitTitle = $organizationItem->getElementsByTagName("title");
  $unitName = $unitTitle->item(0)->nodeValue;
  echo '<li>',$unitName,'</li>';
  echo '<ul>';
  $item1 = $organizationItem->getElementsByTagName( "item" );
    foreach( $item1 as $myitem ) {
    $title = $myitem->getElementsByTagName("title");
    $author = $title->item(0)->nodeValue;
    echo '<li>',$author,'</li>';
    }
  echo '</ul>';  
  }
  echo '</ul>';

生成的输出 - http://codepad.org/J2vP71rd

预期输出 - http://codepad.org/uzUtehgT

让我知道我在 for each 循环中做错了什么。

【问题讨论】:

  • 没有查看代码,但似乎只有下面没有列表的行没有得到处理。
  • 你在检查哪个浏览器?

标签: php xml dom foreach domdocument


【解决方案1】:

因为item 元素是嵌套的。 $dom-&gt;getElementsByTagName( "item" ) 获取所有 item 元素,包括位于另一个 item 中的元素。这不是你想要的。

我建议使用XPath 来完成这种工作。

【讨论】:

  • 偏爱 xPath 的任何原因?
  • @swapnesh 因为 XPath 旨在从 XML 文档中选择节点。它比 DOM 方法更强大、更灵活。
猜你喜欢
  • 2012-02-21
  • 2018-06-25
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多