初学者PHP XPath文本显示

时间:2014-07-26 23:47:14

标签: php xpath

目标:使用xpath checker / Firefox和PHP在网页上显示选择性文字。

为了在此页面上仅显示名称(文本),需要什么PHP XPATH代码? http://steamcommunity.com/profiles/76561197967713768

使用此代码:

<?php
$html = new DOMDocument();
@$html->loadHtmlFile('http://steamcommunity.com/profiles/76561197967713768');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( "//div[@class='persona_name']" );
foreach ($nodelist as $n){
echo $n->nodeValue."\n";
}
?>

我得到&#34; mopar410的输出。此用户也扮演:&#34; 我想只显示&#34; mopar410&#34; 。我想删除&#34;此用户也播放为:&#34; 部分。

有些信息无法通过xml访问,当我用Firefox中的xpath检查器替换上面的内容时(例子):

<?php
$html = new DOMDocument();
@$html->loadHtmlFile('http://steamcommunity.com/profiles/76561197967713768');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( "/x:html/x:body/x:div[3]/x:div[1]/x:div/x:div/x:div/x:div[3]/x:div[1]']" );
foreach ($nodelist as $n){
echo $n->nodeValue."\n";
}
?>

它不起作用,我收到错误。右键单击并查看XPATH,然后将该xpath传输到PHP代码的正确方法是什么?

Warning: DOMXPath::query(): Undefined namespace prefix in blahblahblah on line 85

Warning: DOMXPath::query(): Invalid expression in blahblahblah on line 85

Warning: Invalid argument supplied for foreach() in blahblahblah on line 86

我是新手。请帮忙。

1 个答案:

答案 0 :(得分:1)

那是因为<div class="persona_name">除了您想要的文本之外还包含其他节点和文本。您可以尝试使用XPath表达式仅获取<div class="persona_name">的直接子节点的非空文本节点:

//div[@class='persona_name']/text()[normalize-space(.)]