【问题标题】:search xml data matching specific dates搜索匹配特定日期的 xml 数据
【发布时间】: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 结构。按照我上面的代码使用文本匹配日期不起作用。

标签: php xml


【解决方案1】:

也许这可以帮助你。 XPath query filtering by date

也许,要获得更多帮助,您需要构建 XML 结构。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多