【问题标题】:Display name of the tools provided in the last X days using XPath in PHP在 PHP 中使用 XPath 显示过去 X 天提供的工具的名称
【发布时间】:2020-12-03 08:55:17
【问题描述】:

再次回到另一个 XML/PHP 问题。 :)

我想在我的网页上显示过去 X 天提供的工具的名称。 X 是用户在文本框中输入的数字,单击提交按钮后,将显示最近 X 天内提供的工具的名称。

这将通过将用户输入的 X 值与我的 XML 文件中的日期进行比较来完成,并找到匹配的工具。

在我的 XML 文件中,我有一个“dateentered”节点,用于存储我输入的随机日期:

<tools>
  <tool type="..." web-based="..." free="...">
    <name>Facebook</name>
    <description>...</description>
    <url>...</url>
    <subjects>...</subjects>
    <creators>...</creators>
    <category>...</category>
    <price>...</price>
    <dateentered>2020-12-01</dateentered>
  </tool>
</tools>

接下来,我在 PHP 中创建了一个函数,它基本上通过从您输入的任何日期中减去当前日期来将“Y-M-D”格式转换为天数:

  function time2string($timeline) {

    $periods = array('day' => 86400);

    $ret = '';
    foreach($periods AS $name => $seconds){
        $num = floor($timeline / $seconds);
        $timeline -= ($num * $seconds);
        $ret .= $num;
    }

    return trim($ret);
}

然后,我使用 simpleXML 加载了我的 xml 文件:

 $xml = simplexml_load_file('tools.xml');

例如,使用上面的 XML 代码示例并做

 $days = $xml->xpath("//tool/dateentered");

 foreach ($days as $day) {
     print (time2string(time()-strtotime($day)));
 }

这会将“2020-12-02”转换为“1”,因此输出“1”,这意味着该函数可以正常工作。

使用 XPath,我想要做的是,我想将用户在文本框中输入的值与从我的 xml 转换的“dateentered”进行比较,如果它们匹配,那么我想显示工具名称。

比如:

if(isset($_REQUEST["submit"])) {

   // time2string function

   $f_day = $_REQUEST["days"]; // getting the value the user enters in the textbox
   $xml = simplexml_load_file('tools.xml');

   // do something here

 }

假设使用我上面提供的 xml 示例,如果用户在文本框中输入 1,则输出应该是:

Facebook

我该如何解决这个问题?

除了必须创建一个函数之外,我还对不同的方法持开放态度,这正是我想出的。

【问题讨论】:

  • 我不会将输入的日期转换为此处开始的天数差异。 XPath 2 能够进行大于/小于字符串比较,您在这里得到的日期格式是“可排序的”。
  • 我明白了。如何将用户输入的值 X 与 xml 中的日期进行比较?因为一个具有字符串格式,而另一个具有日期格式。我对 XPath 和 PHP 还是很陌生,所以我真的很感激一些提示。 :)
  • 不确定您所说的“因为一个具有字符串格式而另一个具有日期格式” 是什么意思?如果您让用户输入天数而不是日期,请先将其输入Y-M-D。 (今天减去 x 天,格式为 Y-M-D)
  • 谢谢你,我能够解决这个问题!我在下面提供了我的答案。

标签: php xml xpath


【解决方案1】:

事实证明,就像@CBroe 所说,我什至不需要将日期转换为天的函数,相反,我可以利用 PHP 的 date() 和 strtotime() 函数,如下所示:

<?php

   if(isset($_REQUEST["submit"])) {

       $xml = simplexml_load_file('tools.xml');
       $f_days = $_REQUEST["days"];
       $days = date("Y-m-d", strtotime("-$f_days days"));
       $xdays = $xml->xpath("//tool[dateentered = '$days']/name");

      foreach ($xdays as $name) {
            echo "<h1 align='center'>".$name."</h1><br>";
      }

   }

?>

这将输出:

Facebook

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2023-03-07
    • 2020-06-03
    相关资源
    最近更新 更多