gpt4 book ai didi

PHP + XPath 获取指定日期之间的节点值

转载 作者:行者123 更新时间:2023-12-03 16:59:35 25 4
gpt4 key购买 nike

我的 XML 文件如下所示:

<record>
<name>John</name>
<StartDate>01-05-2016</StartDate>
<EndDate>30-10-2016</EndDate>
</record>
<record>
<name>Jerry</name>
<StartDate>29-04-2016</StartDate>
<EndDate>30-06-2016</EndDate>
</record>
<record>
<name>Mike</name>
<StartDate>05-06-2016</StartDate>
<EndDate>25-08-2016</EndDate>
</record>

我有两个约会说:

start date: 30-04-2016 and,
end date: 27-08-2016

我想编写一个 Xpath 查询,它将返回所有具有 <StartDate> 的记录和<EndDate>在上述两个日期之间(包括两者)。

最佳答案

您可以解析数据并将其添加到数组中,作为 stdClass 或您最喜欢的任何内容:

<?php

$xml =
'<root>
<record>
<name>John</name>
<StartDate>01-05-2016</StartDate>
<EndDate>30-10-2016</EndDate>
</record>
<record>
<name>Jerry</name>
<StartDate>29-04-2016</StartDate>
<EndDate>30-06-2016</EndDate>
</record>
<record>
<name>Mike</name>
<StartDate>05-06-2016</StartDate>
<EndDate>25-08-2016</EndDate>
</record>
</root>';

$doc= new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//record");

$output = [];

$format = 'd-m-Y';
$startDate = DateTime::createFromFormat($format, '30-04-2016');
$endDate = DateTime::createFromFormat($format, '27-08-2016');

foreach($elements as $element) {
$elementStartDate = DateTime::createFromFormat($format, $element->getElementsByTagName("StartDate")->item(0)->nodeValue);
$elementEndDate = DateTime::createFromFormat($format, $element->getElementsByTagName("EndDate")->item(0)->nodeValue);

if( ($startDate <= $elementStartDate) &&
($endDate >= $elementEndDate)) {
$obj = new stdClass;
$obj->name = $element->getElementsByTagName("name")->item(0)->nodeValue;
$obj->startDate = $element->getElementsByTagName("StartDate")->item(0)->nodeValue;
$obj->endDate = $element->getElementsByTagName("EndDate")->item(0)->nodeValue;
$output[] = $obj;
}
}

var_dump($output);

输出

array(1) {
[0]=>
object(stdClass)#10 (3) {
["name"]=>
string(4) "Mike"
["startDate"]=>
string(10) "05-06-2016"
["endDate"]=>
string(10) "25-08-2016"
}
}

关于PHP + XPath 获取指定日期之间的节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com