检查xml文件是否包含PHP中的特定标记
我得到了一个类似以下内容的xml文件:检查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 <
<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