2011-03-19 81 views
1

我在这里找不到任何东西或谷歌有关解析隐藏的输入值。比如这段代码就在这里。我正试图解析40个字符的键。如何解析隐藏的输入值

<input type="hidden" name="key" value="c126b4f134cb2c1184c1585fdfa4d1b0013a12f4"> 

我试过这个,但它永远不会返回任何隐藏的值。

libxml_use_internal_errors(TRUE); 
    $dom = new DOMDocument; 
    $dom->loadHTMLFile('http://www6.cbox.ws/box/?boxid=524970&boxtag=7xpsk7&sec=form'); 
    libxml_clear_errors(); 

    $xp = new DOMXpath($dom); 
    $nodes = $xp->query('//input/@value'); 
    foreach($nodes as $node) 
     { 
      echo($node->textContent . "<br><br>"); 
     } 

var_dump($node); 

更新代码

libxml_use_internal_errors(TRUE); 
$dom = new DOMDocument; 
$dom->loadHTMLFile('http://www6.cbox.ws/box/?boxid=524970&boxtag=7xpsk7&sec=form'); 
libxml_clear_errors(); 

$xp = new DOMXpath($dom); 
$nodes = $xp->query('//input[type="hidden"]'); 
$val = $nodes->getAttribute('value'); 

var_dump($val); 

返回此错误参照线 “$ VAL = $节点 - >的getAttribute( '值');”

Fatal error: Call to undefined method DOMNodeList::getAttribute() 
+0

XPath返回的NodeList作为它的结果,而不是一个节点。改为使用'$ nodes [0] - > getAttribute()'。 – 2011-03-19 02:56:53

回答

2
$nodes = $xp->query('//input[type="hidden"]'); 
foreach ($nodes as $node) { 
    $val = $node->getAttribute('value'); 
} 

评论随访:

如果你看一下你已经包含在您的代码示例中的页面的源代码,你会看到这里只有一个隐藏的表单字段,并且它有一个空值:

<input type="hidden" name="key" value=""> 

所以当然XPath将返回一个NULL值 - 这就是存储在该值属性中的值:无。

+0

@Marc B我试过这个,但我得到“NULL” – jennifer 2011-03-19 02:14:41

+0

@jennifer:该页面中唯一隐藏的字段是'。所以也许这就是为什么你没有结果。你的问题的' - > textContent'在任何情况下都是空的(?) – mario 2011-03-19 02:18:39

+0

@mario是每个循环都没有必要,因为这个代码只有一个实例,就像你说的那样,但是如何获得那个字符串从价值? – jennifer 2011-03-19 02:37:35

0

使用您的更新代码,固定的版本将是:

<?php 

libxml_use_internal_errors(TRUE); 
$dom = new DOMDocument; 
// This link is now dead... 
$dom->loadHTMLFile('http://www6.cbox.ws/box/?boxid=524970&boxtag=7xpsk7&sec=form'); 
libxml_clear_errors(); 

$val = array(); // Must be set before foreach loop 

$xp = new DOMXpath($dom); 
$nodes = $xp->query('//input[type="hidden"]'); 
foreach ($nodes as $node) { 
    $val[] = $node->getAttribute('value'); 
} 

var_dump($val); 

?>