检查xml文件是否包含PHP中的特定标记

时间:2014-09-18 07:31:04

标签: php 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 个答案:

答案 0 :(得分:1)

您应该使用Xpath:$result = $xml->xpath('//model_name[../status]');

并使用count($result)来计算$result中的点击次数。

答案 1 :(得分: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