Как очистить элемент страницы с помощью xpath

Я хочу получить электронную почту элемента, используя 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, но не мог понять.

Пожалуйста, предоставьте любое решение.

0

Решение

Изучение 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]
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]