3

部分的に一致する ID を持つすべての要素を取得する方法はありますか。たとえば、Web ページ上のすべての HTML 要素を取得したい場合、id 属性は id 属性で始まりますが、msg_その後は何でもかまいません。

これが私がこれまでに行ったことです:

$doc = new DomDocument;

// We need to validate our document before refering to the id
$doc->validateOnParse = true;
$doc->loadHtml(file_get_contents('{URL IS HERE}'));
foreach($doc->getElementById('msg_') as $element) { 
   foreach($element->getElementsByTagName('a') as $link)
   {
      echo $link->nodeValue . "\n";
   }
}

しかし、このビットで部分的な ID 一致を行う方法を理解する必要があります: $doc->getElementById('msg_')または、これを達成する他の方法があるかどうか...??

基本的に、id で始まる要素の子であるすべての「a」タグを取得する必要がありmsg_ ますaこれにも foreach を使用している理由。

これは DomDocument PHP クラスで可能ですか?

これが私が現在使用しているコードですが、どちらも機能しません。

$str = '';
$filename = 'http://dream-portal.net/index.php/board,65.0.html';
@set_time_limit(0);

$fp = fopen($filename, 'rb');
while (!feof($fp))
{
    $str .= fgets($fp, 16384);
}
fclose($fp);

$doc = new DOMDocument();
$doc->loadXML($str);

$selector = new DOMXPath($doc);

$elements = $selector->query('//row[starts-with(@id, "msg_")]');

foreach ($elements as $node) {
    var_dump($node->nodeValue) . PHP_EOL;
}

HTMLは次のとおりです(spanタグ内にあります):

<td class="subject windowbg2">
<div>
  <span id="msg_6555">
    <a href="http://dream-portal.net/index.php?topic=834.0">Poll 1.0</a>
  </span>
  <p>
    Started by 
    <a href="http://dream-portal.net/index.php?action=profile;u=1" title="View the profile of SoLoGHoST">SoLoGHoST</a>
    <small id="pages6555">
      « 
      <a class="navPages" href="http://dream-portal.net/index.php?topic=834.0">1</a>
      <a class="navPages" href="http://dream-portal.net/index.php?topic=834.15">2</a>
        »
    </small>

                        with 963 Views

  </p>
</div>
</td>

それはその<span id="msg_部分であり、これらはたくさんあります (HTML ページには少なくとも 15 個あります)。

4

1 に答える 1

4

これを使って:

$str = file_get_contents('http://dream-portal.net/index.php/board,65.0.html');

$doc = new DOMDocument();
@$doc->loadHTML($str);

$selector = new DOMXPath($doc);

foreach ($selector->query('//*[starts-with(@id, "msg_")]') as $node) {
    var_dump($node->nodeValue) . PHP_EOL;
}

あなたにあげる:

string(8) "Poll 1.0"
string(12) "Shoutbox 2.2"
string(24) "Polaroid Attachments 1.6"
string(24) "Featured News Slider 1.3"
string(17) "Image Resizer 1.0"
string(8) "Blog 2.2"
string(13) "RSS Feeds 1.0"
string(19) "Adspace Manager 1.2"
string(21) "Facebook Like Box 1.0"
string(15) "Price Table 1.0"
string(13) "SMF Links 1.0"
string(19) "Download System 1.2"
string(16) "[*]Site News 1.0"
string(12) "Calendar 1.3"
string(16) "Page Peel Ad 1.1"
string(20) "Sexy Bookmarks 1.0.1"
string(15) "Forum Staff 1.2"
string(21) "Facebook Comments 1.0"
string(15) "Attachments 1.4"
string(25) "YouTube Channels 0.9 Beta"
于 2013-04-27T03:27:33.733 に答える