Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Php 如何确认/检查XML中是否存在标记_Php_Xml_Dom_Xml Parsing - Fatal编程技术网

Php 如何确认/检查XML中是否存在标记

Php 如何确认/检查XML中是否存在标记,php,xml,dom,xml-parsing,Php,Xml,Dom,Xml Parsing,我正在尝试使用DOM解析器读取XML。我的XML是动态的,所以我不能说所有的值/标记总是出现在XML中。在这种情况下,我需要在读取之前检查标记是否存在 我也试过这样做 if($val->getElementsByTagName("cityName") != null) { } if(!empty($val->getElementsByTagName("cityName"))) { } getting error : Fatal error: Call to a member

我正在尝试使用
DOM
解析器读取XML。我的
XML
是动态的,所以我不能说所有的值/标记总是出现在
XML
中。在这种情况下,我需要在读取之前检查标记是否存在

我也试过这样做

if($val->getElementsByTagName("cityName") != null) {

}

if(!empty($val->getElementsByTagName("cityName"))) {

}

getting error : Fatal error: Call to a member function getElementsByTagName() on a non-object in F:\xampp\htdocs\test\static-data.php on line 160

找到标签存在的任何解决方案。就像我们检查天气属性是否存在一样,我们也有属性。

如果使用Xpath获取节点,可以避免验证

加载一些XML并为其创建一个DOMXpath实例

$xml = <<<XML
<phoneNumbers>
  <phoneNumber type="home">212 555-1234</phoneNumber>
  <phoneNumber type="fax">646 555-4567</phoneNumber>
</phoneNumbers>
XML;

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
输出:

string(12) "212 555-1234"
string(0) ""
array(4) {
  ["all"]=>
  float(2)
  ["home"]=>
  float(1)
  ["fax"]=>
  float(1)
  ["mobile"]=>
  float(0)
}
string(4) "home"
string(12) "212 555-1234"
string(3) "fax"
string(12) "646 555-4567"
不存在“移动”号码,因此结果为空字符串

var_dump(
  $xpath->evaluate('string(/phoneNumbers/phoneNumber[@type="mobile"])')
);
输出:

string(12) "212 555-1234"
string(0) ""
array(4) {
  ["all"]=>
  float(2)
  ["home"]=>
  float(1)
  ["fax"]=>
  float(1)
  ["mobile"]=>
  float(0)
}
string(4) "home"
string(12) "212 555-1234"
string(3) "fax"
string(12) "646 555-4567"
你可以数一数:

var_dump(
  [
    'all' => $xpath->evaluate('count(/phoneNumbers/phoneNumber)'),
    'home' => $xpath->evaluate('count(/phoneNumbers/phoneNumber[@type="home"])'),
    'fax' => $xpath->evaluate('count(/phoneNumbers/phoneNumber[@type="fax"])'),
    'mobile' => $xpath->evaluate('count(/phoneNumbers/phoneNumber[@type="mobile"])')
  ]
);
输出:

string(12) "212 555-1234"
string(0) ""
array(4) {
  ["all"]=>
  float(2)
  ["home"]=>
  float(1)
  ["fax"]=>
  float(1)
  ["mobile"]=>
  float(0)
}
string(4) "home"
string(12) "212 555-1234"
string(3) "fax"
string(12) "646 555-4567"
或者迭代这些数字

foreach ($xpath->evaluate('/phoneNumbers/phoneNumber') as $phoneNumber) {
  var_dump(
    $phoneNumber->getAttribute('type'),
    $phoneNumber->nodeValue
  );
}
输出:

string(12) "212 555-1234"
string(0) ""
array(4) {
  ["all"]=>
  float(2)
  ["home"]=>
  float(1)
  ["fax"]=>
  float(1)
  ["mobile"]=>
  float(0)
}
string(4) "home"
string(12) "212 555-1234"
string(3) "fax"
string(12) "646 555-4567"
完整示例: