解析html以查找特定的输入值

时间:2013-12-06 16:53:28

标签: php parsing html-parsing domdocument

我有以下Paypal按钮代码:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="ABCDEFG">
<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
</form>

我需要从名为hosted_button_id

的输入中提取值

这就是我正在尝试的:

$html = '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="ABCDEFG">
<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
</form>';

$dom = new DOMDocument();
$dom->loadHTML($html);

$pp_code = $dom->getAttribute('hosted_button_id');

echo "code is $pp_code"; die;

但是我得到了错误:

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: error parsing attribute name in Entity, line: 1 in /home/parkview/DB8NP8XA/htdocs/ajax/actions/addEvent.php on line 20

Fatal error: Call to undefined method DOMDocument::getAttribute() in /home/parkview/DB8NP8XA/htdocs/ajax/actions/addEvent.php on line 22

4 个答案:

答案 0 :(得分:0)

有关“警告”的说明:

  

虽然格式错误的HTML应该成功加载,但此功能可能会   遇到错误标记时生成E_WARNING错误。的libxml的   错误处理函数可用于处理这些错误。

当您的HTML标记错误时 - 您会收到警告,您可以通过以下方式禁用该警告 此解决方案:https://stackoverflow.com/a/6090728/998096

关于您获得的“致命错误”的说明:

对于DOMDocument,没有这样的方法“getAttribute”,首先需要获取Element。 Element有这种方法。 例如:

 $xml = new DOMDocument(); 

// Load the url's contents into the DOM 
$xml->loadHTMLFile($url); 

//Loop through each <a> tag in the dom and add it to the link array 
$link = $xml->getElementsByTagName('a');
$url = $link->getAttribute('href');

取自PHP手册(评论)。

考虑在该特定输入字段中添加“id”属性, 并使用:

$html->getElementById('the_input_id');

答案 1 :(得分:0)

在该字段中添加id属性,您只需使用getElementById(“hosted_button_id”)。value即该值的值

答案 2 :(得分:0)

将我的评论添加为答案..

http://www.php.net/manual/en/domdocument.getelementsbytagname.php

正如我的评论中提到的,我的PHP缺乏,所以希望这将是有用的。这应该抓取包含“hosted_button_id”作为名称的所有元素。假设你只有一个,你应该能够抓住该NodeList中索引0的第一个也是唯一一个元素。

$dom->getElementsByTagName("hosted_button_id")->item(0); 

答案 3 :(得分:0)

这就是我正在做的,因为无法提取单个元素值:

$inputs = $dom->getElementsByTagName("input");

foreach ($inputs as $input) {
    if ($input->getAttribute("name") == "hosted_button_id") {
        $pp_code = $input->getAttribute("value");
    }
}