Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查xml文件是否包含PHP中的特定标记_Php_Xml - Fatal编程技术网

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

检查xml文件是否包含PHP中的特定标记,php,xml,Php,Xml,我得到了一个类似以下内容的xml文件: <model_info> <status>available</status> <model_name>Alexia</model_name> </model_info> 可获得的 失读症 现在在我的php代码中,我想检查xml文件是否包含标记 $xml = simplexml_load_file($xml_path); //if xml contain <

我得到了一个类似以下内容的xml文件:

<model_info>
    <status>available</status>
    <model_name>Alexia</model_name>
</model_info>

可获得的
失读症
现在在我的php代码中,我想检查xml文件是否包含
标记

$xml = simplexml_load_file($xml_path);
//if xml contain <status></status> tags-->
  {
   $model_name = $xml->model_name;
  } else { exit; }
$xml=simplexml\u加载文件($xml\u路径);
//如果xml包含标记-->
{
$model\u name=$xml->model\u name;
}else{exit;}

有人能告诉你检查这个条件的正确方法或语法吗?

你应该使用Xpath:
$result=$xml->Xpath(“//model_name[../status]”)

并使用
count($result)
计算
$result

中的点击次数(仅显示SimpleXML的解决方案,因为它是您在问题中使用的)

我发现处理这个问题的最佳方法是在节点上使用
getName()
,并检查它是否为空(
='

否则,您可能会遇到节点问题,例如基于节点值的一些其他类型的检查

$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));
以你的例子来说:

$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);

我尝试过这段代码,但当我删除状态标记时,条件仍然为真。@Ren,嗯,它对我很有效。如果我删除
,$model\u name=NULL。我不知道你是怎么尝试的。您检查/发送了哪个节点?我更新了我的答案,给出了完整的代码和输出。如果(node_exists($xml->status)){echo“true”;}否则{echo“false”;},我会这样尝试。不管标签存在与否,都是真的。@Ren我帮不了你太多了。我使用了您提供的确切的XML结构,并提供了复制解决方案所需的所有代码。我的运行方式与您的代码完全相同,结果是“object(SimpleXMLElement)#2(1){[0]=>string(6)“Alexia”}”。如果状态标记存在或不存在,则情况相同。有什么想法吗?我编辑了我的答案以包含状态标记好的,但我需要检查状态标记,为什么会有//model\u name?你的意思是//型号信息吗?@Ren在你自己的问题中,你想知道型号名称。这就是为什么
//model\u name
。因为您希望有一个名为status的同级,所以您需要
[../status]
,这实际上意味着“查看父级内部的状态标记”。噢,不,我的意思是检查标记是否存在,然后保存模型名称,如果不存在,则退出代码。我想我只需要使用$result=$xml->xpath('status');我发现一切都是我想要的^^
$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