Я хочу получить электронную почту элемента, используя xpath
<td>
<span id="A-1_id_1151_1997" class="">[email protected]</span>
</td>
Я пробовал много кодов, и один из них это
$html = new DOMDocument();
@$html->loadHtmlFile('http://www.deutsches-krankenhaus-verzeichnis.de/suche/Krankenhaus/260530089-00-1.1/Alexianer-Aachen-GmbH.jsf');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( '//*[@id="accordion"]/table[4]/tbody/tr[2]/td[7]' );
foreach ($nodelist as $n){
echo $n->nodeValue."\n";
если я использую идентификатор, то отображается электронная почта, но с тегом TD ее нет, так как страница является динамической, и идентификатор изменяется на каждой странице. Я думаю, что проблема с nodeValue, но не мог понять.
Пожалуйста, предоставьте любое решение.
Изучение http://www.deutsches-krankenhaus-verzeichnis.de/suche/Krankenhaus/260530089-00-1.1/Alexianer-Aachen-GmbH.jsf мне кажется, что вы можете получить нужные вам узлы с помощью следующего выражения XPath:
//table[*[@class="tablehead"]/td/*[text()="E-Mail"]]//tr[2]/td[7]
То есть переводится в прозе: «Найди любой table
у которого есть ребенок с class
атрибут, значение которого tablehead
и который в свою очередь имеет td
ребенок, у которого, в свою очередь, есть ребенок, текстовое содержание которого «E-Mail
— и если вы найдете такой table
получить 7-й td
ребенок 2-го tr
потомок этого. ”
Если вы хотите получить только любой td
который содержит конкретный адрес электронной почты, вы можете просто проверить, что текстовый контекст всего узла соответствует этому конкретному адресу электронной почты, и если вы хотите получить только первый такой соответствующий узел, используйте [1]
предикат позиции против всего выражения:
(//table[*[@class="tablehead"]/td/*[text()="E-Mail"]]//tr[2]/td[7][.="[email protected]"])[1]
Других решений пока нет …