使用php DOMDocument()获取多个span标记值并将它们插入到mysql db中

时间:2012-10-26 23:09:04

标签: php domdocument

我需要使用php从span标签中获取多个值,例如:

   <div>
    <span class='name'>name value</span>
    <span class='city'>city name</span>
    <span class='street'>street name</span>
    <span class='phone'>+17240000000</span>
    </div>
  <div>
   <span class='name'>name value 2</span>
   <span class='city'>city name 2</span>
   <span class='street'>street name 2</span>
   <span class='phone'>+17240000000 2</span>
  </div> 

我必须使用span类获取跨度值,我尝试使用此代码来获取值,并且它仅适用于1个值,例如“name”:

<?
$html = "<div>
         <span class='name'>name value</span>
         <span class='city'>city name</span>
         <span class='street'>street name</span>
         <span class='phone'>+17240000000</span>
         </div>
         <div>
         <span class='name'>name value 2</span>
         <span class='city'>city name 2</span>
         <span class='street'>street name 2</span>
         <span class='phone'>+17240000000 2</span>
         </div>";
$dom = new DOMDocument();
@$dom->loadHTML($html);
$dom_xpath = new DOMXPath($dom);

$entries = $dom_xpath->evaluate("//span[@class='name']");
foreach ($entries as $entry) {
   echo  $entry->nodeValue."<br />";
}
?>

是否有人帮我修饰代码,以便我可以获得所有值

由于

1 个答案:

答案 0 :(得分:2)

尝试更改

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

foreach($dom->getElementsByTagName('span') as $span){
  echo $span->nodeValue . '<br>';
  //echo $span->getAttribute('class');
}

基于上述格式,您可能想尝试这个(假设className永远不会改变并且始终存在)

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

$result = array();
foreach ($dom->getElementsByTagName('div') as $div){
    $temp = array();
    foreach($div->getElementsByTagName('span') as $span){
        $temp[$span->getAttribute('class')] = $span->nodeValue; 
    }

    // db insert here
    // You may want to do some error check before inserting the data by making sure the array key exist 
    // need to escape data (SQL_injection)
    //mysql_query("INSERT INTO db (`name`,`city`,`street`,`phone`) VALUES('{$temp['name']}','{$temp['city']}','{$temp['street']}','{$temp['phone']}')");

    $result[] = $temp;

}

print_r($result);

你需要在将它们插入db(sql注入)之前转义你的值,并且更有效地进行批量插入 - 在insert multiple rows via a php array into mysqlhttp://en.wikipedia.org/wiki/SQL_injection

了解详情

 $entries = $dom_xpath->evaluate("//span[@class='name']")

 $entries = $dom_xpath->evaluate("//span")