Я прохожу через файл определения xml, и у меня есть DOMNodeList, который я просматриваю. Мне нужно извлечь содержимое дочернего тега, который может быть или не быть в текущем объекте
<input id="name"> <label>Full Name:</label> <required /> </input> <input id="phone"> <required /> </input> <input id="email" />
Мне нужно заменить ????????????? с чем-то, что доставит мне содержимое тега метки, если оно существует.
Код:
foreach($dom->getElementsByTagName('required') as $required){ $curr = $required->parentNode; $label[$curr->getAttribute('id')] = ????????????? }
Ожидаемый результат:
Array( ['name'] => "Full Name:" ['phone'] => )
Странная вещь: вы уже знаете ответ, так как вы использовали его в своем скрипте, getElementsByTagName () .
Но на этот раз не с DOMDocument в качестве контекстного «узла», а с input
DOMElement:
<?php $doc = getDoc(); foreach( $doc->getElementsByTagName('required') as $e ) { $e = $e->parentNode; // this should be the <input> element // all <label> elements that are direct children of this <input> element foreach( $e->getElementsByTagName('label') as $l ) { echo 'label="', $l->nodeValue, "\"\n"; } } function getDoc() { $doc = new DOMDocument; $doc->loadxml('<foo> <input id="name"> <label>Full Name:</label> <required /> </input> <input id="phone"> <required /> </input> <input id="email" /> </foo>'); return $doc; }
prints label="Full Name:"