Проверьте, содержат ли XML-файлы определенные теги в переполнении стека

Я получил 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; }

Может кто-нибудь посоветовать, какой правильный способ или синтаксис проверить это условие?

2

Решение

Вы должны использовать Xpath: $result = $xml->xpath('//model_name[../status]');

И использовать count($result) посчитать, сколько хитов присутствует в $result,

1

Другие решения

(Просто показываю решение с 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
1

По вопросам рекламы [email protected]