我想使用xpath
获取元素的电子邮件<td>
<span id="A-1_id_1151_1997" class="">info@alexianer.com</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";
如果我使用id然后显示电子邮件但是TD标签不显示,因为页面是动态的并且id在每个页面上都会更改。我认为问题出在nodeValue上,但无法弄清楚。
请提供任何解决方案。
答案 0 :(得分:1)
检查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
” - 如果你发现这样的td
,请获得第二个tr
后代的第7个td
孩子。”
如果您只想获得包含特定电子邮件地址的任何[1]
,您只需检查整个节点的文本上下文是否与该特定电子邮件地址匹配,如果您只想查看得到第一个这样的匹配节点,对整个表达式使用(//table[*[@class="tablehead"]/td/*[text()="E-Mail"]]//tr[2]/td[7][.="info@alexianer-aachen.de"])[1]
位置谓词:
question1.setRotation(180);
RelativeLayout.LayoutParams for_question1_x = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
for_question1_x.setMargins(935, 465, 0, 0);
question1.setLayoutParams(for_question1_x);
question1.requestLayout();