如果日期为,则使用PHP读取XML文件


Reading XML file with PHP if date is

因此,我试图创建一个页面,在特定的日子读取特定的XML文件。我对此有意见,我们将不胜感激。

这是我的XML文件的结构:

<?xml version="1.0" encoding="iso-8859-1"?>
<excercises>
  <excercise>
        <name>Test</name>
    <sr></sr>
    <weight>25kg</weight>
    <comment>Testing</comment>
  </excercise>
    <excercise>
    <name>Test II</name>
    <sr></sr>
    <weight>250kg</weight>
    <comment>Testing more</comment>
  </excercise>
</excercises>

这是我的PHP代码:

<?php $month = mktime("m"); ?>
<?php $weekday = mktime("weekday"); ?>
<?php 
$doc = new DOMDocument(); 
if ($month == "01","03","05","07","09","11") && ($weekday == "Monday") {
    $doc->loadXML( 'resourceMon.xml' ); }
if ($month == "01","03","05","07","09","11") && ($weekday == "Tuesday") {
    $doc->load( 'resourceTue.xml' ); }
if ($month == "01","03","05","07","09","11") && ($weekday == "Thursday") {
    $doc->load( 'resourceThu.xml' ); }
if ($month == "01","03","05","07","09","11") && ($weekday == "Friday") {
    $doc->load( 'resourceFri.xml' ); }
if ($month == "02","04","06","08","10","12") && ($weekday == "Monday") {
    $doc->load( 'resourceMon.xml' ); }
if ($month == "02","04","06","08","10","12") && ($weekday == "Tuesday") {
    $doc->load( 'resourceTue.xml' ); }
if ($month == "02","04","06","08","10","12") && ($weekday == "Thursday") {
    $doc->load( 'resourceThu.xml' ); }
if ($month == "02","04","06","08","10","12") && ($weekday == "Friday") {
    $doc->load( 'resourceFri.xml' ); }
else { echo "This day is not a right day to workout!"; }

$xpath = new DOMXPath($dom);  

$root=$doc->documentElement;
$excercises = $dom->getElementsByTagName( "excercise" ); 
foreach( $excercises as $excercise ) { 
  $names = $excercise->getElementsByTagName( "name" ); 
  $name = $names->item(0)->nodeValue; 
  $sr = $excercise->getElementsByTagName( "sr" ); 
  $sr = $sr->item(0)->nodeValue; 
  $weights= $excercise->getElementsByTagName( "weight" ); 
  $weight= $weights->item(0)->nodeValue; 
  $comments = $excercise->getElementsByTagName( "comment" ); 
  $comment = $comments->item(0)->nodeValue; 
  echo "<tr><td><b>$name</b></td><td>$sr</td><td>$weight</td><td><i>$comment</i></td></tr>"; 
  } 
?>

首先,阅读mktime的文档。它根本不像你试图使用它那样工作。

其次,$foo == "01", "02", ...是无稽之谈。如果需要进行比较,请使用in_array

第三,你把事情搞得太复杂了。做一些类似的事情:

$file = 'resource' . date('D') . '.xml';
$doc->loadXML($file);

switch (date('N')) {
    case 1 :
        $file = 'resourceMon.xml';
        break;
    case 2 :
        ...
    default :
        return false;
}
$doc->loadXML($file);

您可以编写这样的条件

if (($month == "01" || $month =="03" || $month =="05" || $month =="07" || $month =="09" || $month =="11")) && ($weekday == "Monday") {
    $doc->loadXML( 'resourceMon.xml' ); }
mktime返回一个unix时间戳

您需要使用日期()

date('l') // returns Monday, Tuesday, Wednesday etc.
date('m') // returns month in two digits, 01, 02, 03 etc.

1)使用date()而不是mktime
2) 使用load()而不是loadXML
3) 制作一个数组,并使用in_array()在数组中查找特定月份

<?php $month = date("m"); 
$weekday = date("D"); 
$doc = new DOMDocument(); 
$monthHaystack = array("01","03","05","07","09","11");
if (in_array($month,$monthHaystack) && ($weekday == "Mon")) {
    $doc->load( 'resourceMon.xml' ); }
else { echo "This day is not a right day to workout!"; }
?>

然后其余部分保持不变,也不需要xpath。