Я получил XML-файлы что-то вроде:
<model_info>
<status>available</status>
<model_name>Alexia</model_name>
</model_info>
теперь в моих кодах php, я хочу проверить, содержат ли XML-файлы <status></status>
теги.
$xml = simplexml_load_file($xml_path);
//if xml contain <status></status> tags-->
{
$model_name = $xml->model_name;
} else { exit; }
Может кто-нибудь посоветовать, какой правильный способ или синтаксис проверить это условие?
Вы должны использовать Xpath: $result = $xml->xpath('//model_name[../status]');
И использовать count($result)
посчитать, сколько хитов присутствует в $result
,
(Просто показываю решение с SimpleXML, так как это то, что вы использовали в своем вопросе)
Лучший способ, который я нашел, чтобы справиться с этим это использовать getName()
на узле, и проверьте, если он пуст (== ''
).
В противном случае у вас могут возникнуть проблемы с такими узлами, как <something></something>
с некоторыми другими типами проверок на основе значения узла.
$str = '<model_info>
<status>available</status>
<model_name>Alexia</model_name>
</model_info>';
$xml = simplexml_load_string($str);function node_exists($simplexml_node) {
return $simplexml_node->getName() != '';
}
var_dump(node_exists($xml->model_name));
var_dump(node_exists($xml->model_oh_nooooo));
Выход :
bool(true)
bool(false)
Итак, с вашим примером:
$str = '<model_info>
<model_name>Alexia</model_name>
</model_info>';
$xml = simplexml_load_string($str);function node_exists($simplexml_node) {
return $simplexml_node->getName() != '';
}
if (node_exists($xml->status)) {
$model_name = $xml->model_name;
}
var_dump($model_name);
Выход :
NULL