如果你使用 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);
获取“家”电话号码:
var_dump(
$xpath->evaluate('string(/phoneNumbers/phoneNumber[@type="home"])')
);
输出:
string(12) "212 555-1234"
不存在“手机”号码,因此结果为空字符串
var_dump(
$xpath->evaluate('string(/phoneNumbers/phoneNumber[@type="mobile"])')
);
输出:
string(0) ""
你可以数数:
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"])')
]
);
输出:
array(4) {
["all"]=>
float(2)
["home"]=>
float(1)
["fax"]=>
float(1)
["mobile"]=>
float(0)
}
或者迭代数字
foreach ($xpath->evaluate('/phoneNumbers/phoneNumber') as $phoneNumber) {
var_dump(
$phoneNumber->getAttribute('type'),
$phoneNumber->nodeValue
);
}
输出:
string(4) "home"
string(12) "212 555-1234"
string(3) "fax"
string(12) "646 555-4567"
完整示例:https://eval.in/123212