1

すべてのタグを繰り返し処理して、クラスがfont18またはfont17であるかどうかを確認するにはどうすればよいですか?

 $html = new DOMDocument();
    $html->load('file.html');

html:

    <p><a name="bookmark7"></a><span class="font18" style="font-weight:bold;">Abilitazione</span></p>
<p><span class="font17">I medici devono essere autorizzati dallo Stato a praticare la loro professione. I requisiti per ottenere questa autorizzazione variano a seconda delle diverse Nazioni. I laureati presso Facoltà mediche estere possono ottenere l'autorizzazione a esercitare in Italia se rispondono ai requisiti statali per quanto riguarda il tirocinio e se superano l'esame di Stato. Nell'ambito della CEE si tratta tuttora di una questione da definire nei particolari.</span></p>

どうもありがとう。

4

2 に答える 2

6

Input is not proper UTF-8, indicate encoding ! Bytes: 0xE0 0x20 0x6D 0x65ここで使用すると、 HTMLでエラーが発生します。これ$doc->load("file.html");は簡単な回避策です。

$doc = new DOMDocument('1.0', 'UTF-8');
libxml_use_internal_errors(true);
$doc->loadHTML(file_get_contents("file.html"));

foreach ( $doc->getElementsByTagName('span') as $node ) {
    if (preg_match("/^font1[7|8]$/", $node->getAttribute('class'))) {
        echo $node->nodeValue, "<br /><br />";
    }
}
于 2013-01-06T20:18:23.767 に答える
4

以下はすべてのタグをループし、spanこれを使用してクラスをチェックできます(提供したHTMLスニペットが実際に使用しているものである場合)。

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->load('file.html');

$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//span');

foreach ($nodes as $node) {
    echo $node->getAttribute('class');
}

デモ:http ://codepad.viper-7.com/pQuQw1

HTMLが実際に異なる場合は、スニペットを変更できるように教えてください。xpathクエリで特定の要素のみを選択することも価値がある場合があります(たとえば、classfont17またはfont18)を持つ要素のみを選択します。

HTMLPathに応じて必要な要素を選択するためにクエリを変更する柔軟性が高くなるため、DOMXPathを使用したことに注意してください。

クラスで要素のみを選択する場合、font17またはfont18クエリを次のように変更できる場合。

$nodes = $xpath->query('//span[contains(@class, "font17")]|//span[contains(@class, "font18")]');

デモ:http ://codepad.viper-7.com/mHo5P7

于 2013-01-06T20:09:36.200 に答える