当我尝试按属性值过滤XML结果(采用单一形式)时,我很好,但是我想传递一个值数组,并让它返回与此匹配的元素。
所以这可以作为一个单独的
return get_reader_xml()->xpath("/ReaderDetails/Reader[Status='Available']");
但是,如果将值更改为数组,如下所示,则会收到语法错误消息。
return get_reader_xml()->xpath("/ReaderDetails/Reader[Status=('Available', 'Busy')]");
很明显,我知道语法错误是什么,但是我读过的所有内容似乎都建议您在此处输入逗号分隔的值...我在犯什么错误?
答案 0 :(得分:1)
return get_reader_xml()->xpath("/ReaderDetails/Reader[Status='Available' or Status='Busy']");
return get_reader_xml()->xpath("/ReaderDetails/Reader[Status='Available'][Status='Busy']");
您可以像上述方式一样传递多个参数。
答案 1 :(得分:0)
您需要从数组创建条件。可以结合使用array_map()
和implode()
。
$xml = <<<'XML'
<ReaderDetails>
<Reader Status='Available'/>
<Reader Status='Busy'/>
<Reader Status='Broken'/>
</ReaderDetails>
XML;
$statusValues = ['Available', 'Busy'];
$condition = implode(
' or ',
array_map(
function($status) {
return '@Status="'.$status.'"';
},
$statusValues
)
);
$expression = '/ReaderDetails/Reader['.$condition.']';
var_dump($expression);
$details = new SimpleXMLElement($xml);
foreach ($details->xpath($expression) as $reader) {
var_dump((string)$reader['Status']);
}
输出:
string(60) "/ReaderDetails/Reader[@Status="Available" or @Status="Busy"]"
string(9) "Available"
string(4) "Busy"