使用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);|#)/", '&', $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。
谢谢,我只是在调查domxpath(),//在查询中做了什么? –
//搜索整个文档 – FuzzyTree
得到它感谢,如果你不介意的话,一个问题。在我使用的窗体上使用firebug的xpath路径如下所示,/ html/body/div/div/form/div [2]/input。我如何在查询中引用div [#]? –