【问题标题】:PHP showing XML calendar data - merge day eventsPHP 显示 XML 日历数据 - 合并日事件
【发布时间】:2022-01-03 04:38:55
【问题描述】:

我有以下 XML 文件,无法编辑。

<event>
<id>100</id>
<startdate>24/11/2021</startdate>
<description>Event Test 1</description>
</event>
<event>
<id>101</id>
<startdate>24/11/2021</startdate>
<description>Event Test 2</description>
</event>

然后我使用 simplexml_load_file($url) 将其输出到 PHP 文件中:

  $sxml = simplexml_load_file($url) or die("Error: Cannot create object");
foreach ($sxml->children() as $data)
{
echo "<li><h1>", $data->startdate . "</h1></li>";
echo "<li><h1>", $data->description . "</h1></li>";
}

这给了我如下输出:

24/11/2021
Event Test 1
24/11/2021
Event Test 2

但是,我想按日期合并事件,所以输出如下:

24/11/2021
    Event Test 1
    Event Test 2

如何在不编辑 XML 文件的情况下实现这一点?

谢谢!

【问题讨论】:

    标签: php xml


    【解决方案1】:

    由于您正在处理 xml,因此您最好使用 xpath 选择数据。

    为了演示,假设您的 xml 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <doc>    
       <event>
          <id>100</id>
          <startdate>24/11/2021</startdate>
          <description>Event Test 1</description>
       </event>
      <event>
         <event>
          <id>101</id>
          <startdate>24/11/2021</startdate>
          <description>Event Test 2</description>
       </event>
          <id>102</id>
          <startdate>24/12/2021</startdate>
          <description>Event Test 3</description>
       </event>
           <event>
          <id>103</id>
          <startdate>24/12/2021</startdate>
          <description>Event Test 4</description>
       </event>    
    </doc>
    

    然后在你的代码中:

    #search for all event start dates
    $starts = $sxml->xpath('//event/startdate');
    
    #get the unique start dates of these event
    $dates = array_unique($starts);
    
    foreach($dates as $date) {     
       echo "<li><h1>{$date}</h1></li>" ."\n";
    
       #search for all events taking place on each start date
       $expression = "//event/startdate[.='{$date}']";
       $events = $sxml->xpath($expression);
       
       #iterate through these events and find their desription
       foreach ($events as $event){
           echo "\t" , "<li><h1> {$event->xpath('./following-sibling::description')[0]}</h1></li>";
           echo "\n";
       }
       echo "\n";
    }
    

    输出:

    <li><h1>24/11/2021</h1></li>
        <li><h1> Event Test 1</h1></li>
        <li><h1> Event Test 2</h1></li>
    
    <li><h1>24/12/2021</h1></li>
        <li><h1> Event Test 3</h1></li>
        <li><h1> Event Test 4</h1></li>
    

    【讨论】:

    • 谢谢,杰克,这是一种享受...只是一个问题,我还输入了一个开始和结束时间,这是有效的,但是,由于并非所有事件,我得到一个错误有一个开始和结束时间,因为它们是一个全天的事件,我可以防止这个错误吗?也许沿着如果没有开始或结束日期,那么回显“全天”?
    • @user2141311 如果没有看到您所指的实际 xml,很难判断。我认为最好将其作为一个新问题发布,我很乐意查看它。
    • 谢谢,这里发布的问题:stackoverflow.com/questions/70103442/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多