【发布时间】:2021-03-20 11:24:27
【问题描述】:
想知道是否有人可以帮助我。我有一个 xml 文件,其中包含日期格式为 2020-12-06T01:00:02.578+11:00 的日志。
我想使用 xpath 来搜索数据并过滤两个日期之间的记录。我无法弄清楚如何通过 xpath 过滤器搜索本身来做到这一点。
到目前为止,以下是我的代码,搜索过滤器不起作用的原因很明显,因为它是一个文本值。我需要先隐藏这个日期吗?
以下使用大于号匹配日期的代码不起作用。
**Sample XML:**
<data>
<faultRecord ack="no"
cause="config-error"
Action="deletePresent"
code="3564"
created="2020-12-06T01:00:02.578+11:00"/>
</data>
$xml = simplexml_load_file('faults.xml');
$faults = new SimpleXMLElement('faults.xml',null,true);
foreach($faults->xpath('//data/faultRecord[@created > "2020-12-06"]') as $faultRecord) {
foreach($faultRecord->attributes() as $Attribute => $value)
if ($Attribute == 'created' or $Attribute == 'description') {
echo "{$Attribute} = {$value} <br /> <br /> ";
}
}
谢谢
编辑 想出了一个办法,以防万一它对任何人有帮助:
$faults = new SimpleXMLElement('faults.xml',null,true);
foreach($faults->xpath('//data/faultRecord[@code = "3564"]') as $faultRecord) {
$date = strtotime($faultRecord->attributes()->created);
if ($date > 1607176802) {
foreach($faultRecord->attributes() as $Attribute => $value)
if ($Attribute == 'created' or $Attribute == 'description') {
echo "{$Attribute} = {$value} <br /> <br /> ";
}
}
}
【问题讨论】:
-
请提供适当的minimal reproducible examples 这样的问题,请包含一些 XML 示例数据,以便我们可以看到什么位于何处。
-
“搜索过滤器不起作用的原因很明显,因为它是一个文本值。我需要先隐藏这个日期吗?” - 不应该,你在这里有一个“可排序”的日期格式,所以包括更大/更小在内的字符串比较应该可以正常工作。
-
对于 DOM,这可以通过 Xpath 回调 PHP 来完成。 stackoverflow.com/questions/23574055/…
-
我以为我已经用足够的信息来描述问题了。至少应该给我一个机会来回答而不是结束这个问题。无论如何,我现在已经添加了正在使用的示例 xml 结构。按照我上面的代码使用文本匹配日期不起作用。