在xpath中使用php变量需要一些帮助

时间:2014-01-22 21:53:09

标签: php xml xpath simplexml

感谢您的网站及其有用的成员,除了一个小问题之外,我几乎完全完成了这个项目。

背景..

我有一个表单,可以将数据输入到xml文件,还有一个页面,根据今天的日期需要匹配的2条条件显示信息,并显示状态。

问题是我使用的代码在仅匹配状态时为我提供数据而不是两者都需要它在显示数据之前匹配两者。

XML结构....

<information>
<entry>
<date></date>
<name></name>
<status></status>
<notes></notes>
<comments></comments>
</entry>
</information>

检索和显示数据的代码......

$lib  = simplexml_load_file("sample.xml");
$today = date('m/d/y');
$query = $lib->xpath("//entry[.//date[contains(., '   $today')]]|//entry[.//status[contains(., 'out')]]");
if( $query ) {
foreach($query as $node){
      echo "<div id='one'>$node->name</div>
<div id='two'>$node->notes</div> 
<div id='three'><div class='front'>$node->comments</div></div>";

}
}
else {
// Echo the special div.
}

因此,您可以从代码中看到我通过$ today函数(它不起作用)查询它是否包含今天的日期,并查询它是否包含状态但是我不能让它工作以匹配它只匹配状态。

我很抱歉,如果之前已经回答了这个问题,我会事先感谢你们对这件事给予的任何帮助。如果问题太模糊或者我没有充分了解细节,我也会道歉。

1 个答案:

答案 0 :(得分:1)

xpath-expression中的|表示or,请尝试此操作:

... xpath("/information/entry[date = '01/23/2014' and status='out']")

如果没有contains()

,它会很有效
<date>01/23/2014</date>
<status>out</status>

使用此

... xpath("/information/entry[date[contains(., '01/23/2014')] and status[contains(., 'out')]]")

就此:

<date>foo01/23/2014</date>
<status>barout</status>

看到它有效:https://eval.in/93642