按日期列出xml siblngs。由于每个日期的时间不同,每个日期可能会多次列出。比如...
已编辑:已添加XML
<?xml version="1.0"?>
<theaterxml>
<theatreid>12345</theatreid>-
<filmtitle>
<name>Movie Name 1</name>
<shortname>MOVIENAME1</shortname>
<rating>R</rating>
<length>101</length>
<show>
<screen>1</screen>
<date>02022013</date>
<time>1205</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02022013</date>
<time>1305</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02022013</date>
<time>1605</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02032013</date>
<time>1205</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02032013</date>
<time>1305</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02032013</date>
<time>1605</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02042013</date>
<time>1205</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02042013</date>
<time>1305</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02042013</date>
<time>1605</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
</filmtitle>
<filmtitle>
<name>Movie Name 2</name>
<shortname>MOVIENAME2</shortname>
<rating>R</rating>
<length>101</length>
<show>
<screen>1</screen>
<date>02022013</date>
<time>1205</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02022013</date>
<time>1305</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02022013</date>
<time>1605</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02032013</date>
<time>1205</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02032013</date>
<time>1305</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02032013</date>
<time>1605</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02042013</date>
<time>1205</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02042013</date>
<time>1305</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
<show>
<screen>1</screen>
<date>02042013</date>
<time>1605</time>
<salelink>http://mysite.com/foo?linkToThisTimeAndDate=999</salelink>
</show>
</filmtitle>
当我使用foreach到达主xml的日期子时,我只得到第一个日期。当我使用while循环时,它会显示每个日期的每次出现,直到没有更多日期。
我需要做的是运行一个while循环,显示每个日期一次,然后是下一个不同的日期,直到不再有。然后,在while循环中我需要另一个显示该日期的每次,直到没有更多。我需要能够通过使用$ _GET ['date']和?date = 01022013的url来决定显示哪个日期和时间。
我希望这是有道理的。我在手机上输入此内容,现在无法访问我的PC来复制/粘贴实际代码或xml。
编辑:现在在PC上
这似乎是很多xml,但这只是一个片段。完整的xml显示8到13部电影,每天2到5次,有时超过3周。每次都要加载它会变得非常沉重。现在我正在使用simplexml,但更愿意使用xmlreader。
今天xml是97.6KB。每次有人进入一个页面,选择其中一个日期,然后转到另一个页面等,在这个和图像之间拉,这是很多东西,这是每次点击一个页面时显示单个页面的大量数据或改变。特别是在慢速连接,移动等方面。
现在我在这个项目的枪口下,并试图进一步学习/重新学习这使我更加落后。我个人鄙视xml,并希望他们的内部软件在mysql数据库中构建它,但这是我必须使用的。此外,设计这个的公司也可以更好地构建它。
答案 0 :(得分:0)
你在寻找这样的东西:
// create a DOM document and load your xml (as string)
$document = new DOMDocument();
$document->loadXML($xml);
// create a xpath selector for the document
$selector = new DOMXPath($document);
// get all show elements
$showResult = $selector->query('//show');
// dates will contain the results
$dates = array();
foreach($showResult as $show) {
// get the date sub node
$dateResult = $selector->query('date', $show);
if(count($dateResult) !== 1) {
die('bad xml');
}
$date = $dateResult->item(0)->nodeValue;
// get the time sub node
$timeResult = $selector->query('time', $show);
if(count($timeResult) !== 1) {
die('bad xml');
}
$time = $timeResult->item(0)->nodeValue;
// if it is the first the time the date appears
// we create an empty array for this index. The
// array will contain the timestamps
if(!isset($dates[$date])) {
$dates[$date] = array();
}
// add time to array if the same does not exists
if(!in_array($time, $dates[$date], TRUE)) {
$dates[$date][] = $time;
}
}
// get all dates and times
var_dump($dates);
// get times for 02022013
var_dump($dates['02022013']);