0

以下のエリアマップの例から属性を取得するのに問題があります

  <area shape="poly" class="areaSelect" coords="475,241,495,220,515,215,531,226,534,262,530,290,493,307,472,287" href="http://www.someURL" title="Area Title" alt="Link Title"/>

ページから他の要素を取得するために simple_html_dom.php を使用しています。どんな助けでも大歓迎です。これについて何度も行っているので、Xpath を使用して XHTML ファイルを読み込んでみましたが、座標を取得しようとすると、「DOMAttr Object ()」の 42 ケースしか得られませんでした。マップには 42 の領域がありますが.. .... ヘルプ!

4

1 に答える 1

0

わかりました、似たようなことをしたい他の人のために、できるだけ多くの詳細を提供しようと思います.

これは簡単なサンプルファイルです。

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Untitled Document</title>
  <style>
   body{font:Arial, Helvetica, sans-serif;}
  </style>
 </head>
 <body>
 <div class="title" style="font-size: 14px; color: #009"><h2>Get any information</h2>     </div>
 <div id="image-holder">
<img src="http://mrg.bz/sb3gG9" alt="microchips" width="496px" height="343px" border="0" usemap="#MicroChips"/>
<map name="MicroChips" id="MicroChips2">
    <area class="areaSelect" shape="poly" coords="46,91,157,43,217,106,101,159" href="http://www.someplace.com" title="Main Chip" alt="Main Chip" />
</map>
<div id="body" style="width:496px">
    <p>This is to demonstrate how to get as much out of a file as possible. Well a least some of it anyway.</p>
    <p>Here is another paragraph to show how to get multiple items</p>
</div>
 </div>
 </body>
 </html>

さて、ここにphpがあります。「PHP Simple HTML DOM Parser」をダウンロードして、テスト サーバーにロードする必要があります。追加機能にアクセスできるようにします。

 <?php
    include('simple_html_dom.php'); //Load/include the PHP Simple HTML DOM Parser

    $html = file_get_html('http://www.YourServer.com/test.html'); // Load your html file

    // create a series of variables to call on later

    $imgtitle = $html->find('div.title', 0)->plaintext; //here we reference the HTML file, and find the div with the class "title" and display it as plaintext

   // ok for some reason and hopefully someone out there can add why
   // I had to reference the fist instance of each element here 
   // referenced as the ',0' in each case. 

   // here you can see we search for the div 'image-holder'
   // and then search in that div for the first image and save it to a variable

    $imageurl =  $html->find('#image-holder',0)->find('img',0); 

   // here we target the image scr, width, height, style, alt, border and usemap and assign them to variables

    $imagesrc = $imageurl->src;
    $imageWidth = $imageurl->width;
    $imageHeight = $imageurl->height;
    $imageStyle = $imageurl->style;
    $imageAlt = $imageurl->alt;
    $imageBrd = $imageurl->border;
    $imageUsemap = $imageurl->usemap;

    $map = $html->find('map',0); // here we look for the map and assign it to a variable

    // here we target the map ID and Name and usemap and assign them to variables

$mapID = $map->id;
$mapName = $map->name;

    // we assigned a class to the map areas to find them easier
    $imgmaparea = $html->find('.areaSelect');

    // ok although the example only has one map area this will find multiple
    // areas and print them on the screen using the 'foreach' function 
    foreach ($imgmaparea as $value){
     $areaShape = $value->shape;
     $areaCoords = $value->coords;
     $areaHref = $value->href;
     $areaTitle = $value->title;
     $areaAlt = $value->alt;
      // print them on the screen
         echo 'Shape: '.$areaShape. '<br>';
     echo 'Coords: '.$areaCoords. '<br>';
         echo 'Href: '.$areaHref. '<br>';
         echo 'Title: '.$areaTitle. '<br>';
         echo 'Alt: '.$areaAlt. '<br>';

   }
         // print them on the screen
         echo 'name: '.$mapName. '<br>';
         echo 'Id: '.$mapID. '<br>';
         echo 'filename: '.$filename. '<br>';
         echo 'Src: '.$imagesrc. '<br>';
         echo 'Width: '.$imageWidth. '<br>';
         echo 'Height: '.$imageHeight. '<br>';
         echo 'Style: '.$imageStyle. '<br>';
         echo 'Alt: '.$imageAlt. '<br>';
         echo 'Usemap: '.$imageUsemap. '<br>';

   ?>

私は徹底的に説明しようとしましたが、他に質問や提案があれば、喜んでここに記載します。

于 2011-08-29T23:56:28.983 に答える