1

たとえば、php を使用してスパン タグから複数の値を取得する必要があります。

   <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> 

スパンクラスを使用してスパン値を取得する必要があります。値を取得するためにこのコードを試してみると、「名前」などの1つの値に対してのみ機能しています:

<?
$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 />";
}
?>

すべての値を取得できるようにコードを修正するのを手伝ってくれる人はいますか

ありがとう

4

1 に答える 1

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 インジェクション)、一括挿入をより効率的に行う必要があります。 /SQL_注入

また

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

 $entries = $dom_xpath->evaluate("//span")
于 2012-10-27T00:06:58.147 に答える