2011-11-06 104 views
25

可能重复:
How to extract a node attribute from XML using PHP's DOM Parser的XPath取属性值

我如何提取的HTML标签的价值?

HTML:

<input type="hidden" name="text1" id="text1" value="need to get this"> 

PHP:

$homepage = file_get_contents('http://www.example.com'); 
$doc = new DOMDocument; 
$doc->preserveWhiteSpace = false; 
@$doc->loadHTML($homepage); 
$xpath = new DOMXpath($doc); 
$filtered = $xpath->query("//input[@name='text1']"); 

我怎么value“需要得到这个”

更新:

我得到它的工作,并希望这将帮助其他人了。上面的代码后,我通过了值:

echo $filtered->item(0)->getAttribute('value'); 
+0

您必须通过foreach($ filtered as $ element){...}来遍历您的过滤元素'$ filtered'并自己检查节点值/属性。 – Smamatti

+5

一种选择是使用较少的'evaluate()'方法,它将返回文本或空字符串:'$ xpath-> evaluate('string(// input [@ name =“text1”]/@ value) ');' – salathe

+4

这不是真正的另一个问题的重复。这是一个真正的跨环境xpath解决方案,另一个是php特定的。 –

回答

34

XPath可以完成获取值属性$xpath->query("//input[@name='text1']/@value");的工作。然后,您可以迭代属性节点的节点列表并访问每个属性节点的$value属性。

+2

只需closevote。它是一个副本 – Gordon

7

我不熟悉这个PHP语法,而是选择属性值你会请使用以下XPath:

//input[@name='text1']/@value 

但是XPath不返回字符串,它返回节点。希望节点的value,所以如果PHP如下约定,代码如下:

$xpath->query("//input[@name='text1']/@value")->value; 

为了便于学习,牢记您经常检查value属性。所以,如果你想在同一元素的名称,你会使用:

$xpath->query("//input[@name]/@name")->value; 

你可能会想,以确保查询查询value财产以及前返回一个非空值。

+0

不起作用。错误'未定义的属性:DOMNodeList :: $ value' –

+1

这适用于我:$ res = $ xpath-> query(“// input [@name]/@ name”); echo $ res-> item(0) - > nodeValue; – TomoMiha

+0

最简单的方法是使用'评估',请参阅https://stackoverflow.com/a/45010743/287948 –