1

私はPHPが初めてです。id以下の html コードで指定されたを見つけるコードを書きたいと思います1123。誰でも私にアイデアを教えてもらえますか?

<span class="miniprofile-container /companies/1123?miniprofile="
      data-tracking="NUS_CMPY_FOL-nhre"
      data-li-getjs="http://s.c.lnkd.licdn.com/scds/concat/common/js?h=dyt8o4nwtaujeutlgncuqe0dn&amp;fc=2">
    <strong>
        <a href="http://www.linkedin.com/nus-trk?trkact=viewCompanyProfile&pk=biz-overview-public&pp=1&poster=&uid=5674666402166894592&ut=NUS_UNIU_FOLLOW_CMPY&r=&f=0&url=http%3A%2F%2Fwww%2Elinkedin%2Ecom%2Fcompany%2F1123%3Ftrk%3DNUS_CMPY_FOL-nhre&urlhash=7qbc">
        Bank of America
        </a>
    </strong>
</span> has a new Project Manager

注: span クラスのコンテンツは必要ありません。idスパンクラス名に が必要です。

私は次のことを試しました:

$dom = new DOMDocument('1.0', 'UTF-8');
@$dom->loadHTML($html);
$xmlElements = simplexml_import_dom($dom);
$id = $xmlElements->xpath("//span [@class='miniprofile-container /companies/$data_id?miniprofile=']");

...しかし、さらに先に進む方法がわかりません。

4

2 に答える 2

1

あなたの必要性に応じて、あなたはすることができます

$matches = array();
preg_match('|<span class="miniprofile-container /companies/(\d+)\?miniprofile|', $html, $matches);
print_r($matches);

これは非常に些細な正規表現ですが、最初の提案として役立つ可能性があります。DomDocument または simplexml 経由で移動する場合は、例のように両方を混在させてはなりません。あなたの好みの方法は何ですか、それからこれを絞り込むことができます.

//編集:@fireeyedboyが言ったことのほとんどですが、これは私が一緒にいじったものです:

<?php
$html = <<<EOD
<html><head></head>
<body>
<span class="miniprofile-container /companies/1123?miniprofile="
      data-tracking="NUS_CMPY_FOL-nhre"
      data-li-getjs="http://s.c.lnkd.licdn.com/scds/concat/common/js?h=dyt8o4nwtaujeutlgncuqe0dn&amp;fc=2">
    <strong>
        <a href="#">
        Bank of America
        </a>
    </strong>
</span> has a new Project Manager

</body>
</html>
EOD;

$domDocument = new DOMDocument('1.0', 'UTF-8');
$domDocument->recover = TRUE;
$domDocument->loadHTML($html);

$xPath = new DOMXPath($domDocument);
$relevantElements = $xPath->query('//span[contains(@class, "miniprofile-container")]');
$foundId = NULL;
foreach($relevantElements as $match) {
    $pregMatches = array();
    if (preg_match('|/companies/(\d+)\?miniprofile|', $match->getAttribute('class'), $pregMatches)) {
        if (isset($pregMatches[1])) {
            $foundId = $pregMatches[1];
            break;
        }
    };
}

echo $foundId;

?>
于 2012-11-15T10:04:22.080 に答える
1

これはあなたが求めていることをするはずです:

$dom = new DOMDocument('1.0', 'UTF-8');
@$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );

/*
 * the following xpath query will find all class attributes of span elements
 * whose class attribute contain the strings " miniprofile-container " and " /companies/"
 */
$nodes = $xpath->query( "//span[contains(concat(' ', @class, ' '), ' miniprofile-container ') and contains(concat(' ', @class, ' '), ' /companies/')]/@class" );
foreach( $nodes as $node )
{
    // extract the number found between "/companies/" and "?miniprofile" in the node's nodeValue
    preg_match( '#/companies/(\d+)\?miniprofile#', $node->nodeValue, $matches );
    var_dump( $matches[ 1 ] );
}
于 2012-11-15T10:20:22.197 に答える