1

xml 兄弟按日期列出。由于每个日期的时间不同,每个日期可能会被列出多次。如...

编辑:添加 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 数据库中构建它,但这是我必须使用的。此外,设计这个的公司也可以更好地构建它。

4

1 回答 1

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']);
于 2013-02-04T23:02:49.787 回答