使用DOMDocument检索某些属性

问题描述:

我想弄清楚如何解析一个html页面以获取表单操作值,表单标签内的标签以及输入字段名称。我看着php.net Domdocument,它告诉我要得到一个孩子节点,但所有这些都会给我错误,它不存在。我也尝试做持有html内容的变量的print_r,所有显示我的是length = 1。有人可以给我看几个我可以使用的样本,因为php.net令人困惑。使用DOMDocument检索某些属性

<?php 

$content = "some-html-source"; 
$content = preg_replace("/&(?!(?:apos|quot|[gl]t|amp);|#)/", '&amp;', $content); 

$dom = new DOMDocument; 
$dom->preserveWhiteSpace = FALSE; 
$dom->loadHTML($content); 

$form = $dom->getElementsByTagName('form'); 

print_r($form); 

我建议使用DomXPath代替getElementsByTagName,因为它可以让你直接选择的属性值,并返回一个DOMNodeList对象就像getElementsByTagName@action中的@表示我们正在按属性选择。

$doc = new DOMDocument(); 
$doc->loadHTML($content); 
$xpath = new DomXPath($doc); 
$action = $xpath->query('//form/@action')->item(0); 
var_dump($action); 

同样,拿到第一input

$action = $xpath->query('//form/input')->item(0); 

要获得所有input领域

for($i=0;$i<$xpath->query('//form/input')->length;$i++) { 
    $label = $xpath->query('//form/input')->item($i); 
    var_dump($label);  
} 

如果你不熟悉使用XPath,我建议您查看these examples

+0

谢谢,我只是在调查domxpath(),//在查询中做了什么? –

+0

//搜索整个文档 – FuzzyTree

+0

得到它感谢,如果你不介意的话,一个问题。在我使用的窗体上使用firebug的xpath路径如下所示,/ html/body/div/div/form/div [2]/input。我如何在查询中引用div [#]? –