1

<img>タグにテキストがあるかどうかを確認したいのですが、alt=""その img タグが DOM のどの行番号にあるのかを調べる必要もあります。現時点では、次のコードを書いていますが、行番号を見つけることに固執しています。例えば:

$doc = new DOMDocument();
$doc->loadHTMLFile('http://www.google.com');
$htmlElement = $doc->getElementsByTagName('html');
$tags = $doc->getElementsByTagName('img');
echo $tags->item(0)->getLineNo();
foreach ($tags as $image) {
    // Get sizes of elements via width and height attributes
    $alt = $image->getAttribute('alt');
    if($alt == ""){
       $src = $image->getAttribute('src'); 
       echo "No alt text ";  
      echo '<img src="http://google.com/'.$src.'" alt=""/>'. '<br>';
    }
    else{
       $src = $image->getAttribute('src'); 
         echo '<img src="http://google.com/'.$src.'" alt=""/>'. '<br>';            
    }             
}

現時点で上記のコードから、画像の横に「代替テキストなし」という画像とテキストを取得していますが、img タグが表示される行番号を取得したいと考えています。たとえば、ここでは行番号は 57 です。

56. <div class="work_item">
57. <p class="pich"><img src="images/works/1.jpg"    alt=""></p>
58. </div>
4

3 に答える 3

1

を使用DOMNode::getLineNo()$line = $image->getLineNo()ます。

于 2012-12-30T16:20:34.217 に答える
0

私が達成しようとしていたことを理解したと思いますが、それが正しい方法かどうかはわかりません。それは仕事をしています。どうすれば改善できるか、コメントやその他のアイデアを残してください。次のサイトにアクセスして、任意の URL を入力します。Web ページのアクセシビリティの問題に関するレポートが生成されます。アクセシビリティチェックツールです。

http://valet.webthing.com/page/

私がやろうとしているのは、そのようなレイアウトを実現することだけです。以下のコードは、提供された URL の DOM を生成し、代替テキストを持たないイメージ タグを見つけます。

<html>
<body>
    <?php
    $dom = new domDocument;
// load the html into the object
    $dom->loadHTMLFile('$yourURLAddress');
// keep white space
    $dom->preserveWhiteSpace = true;
// nicely format output
    $dom->formatOutput = true; 
    $new = htmlspecialchars($dom->saveHTML(), ENT_QUOTES);
    $lines = preg_split('/\r\n|\r|\n/', $new); //split the string on new lines
    echo "<pre>";
    //find 'alt=""' and print the line number and html tag
    foreach ($lines as $lineNumber => $line) {

        if (strpos($line, htmlspecialchars('alt=""')) !== false) {
            echo "\r\n" . $lineNumber . ". " . $line;
        }
    }
    echo "\n\n\nBelow is the whole DOM\n\n\n";
    //print out the whole DOM including line numbers
    foreach ($lines as $lineNumber => $line) {
        echo "\r\n" . $lineNumber . ". " . $line;
    }
    echo "</pre>";
    ?>   
 </body> 
</html>

特に "chwagssd" と Mike Johnson を助けてくれたすべての人に感謝します。

于 2012-12-31T06:19:51.810 に答える
0

HTML では、行番号は単なる空白であるため、実際の行番号の概念はありません。

それを念頭に置いて、ターゲット ノードの前にあるすべてのテキスト ノードに含まれる改行の数を数えることができる場合があります。DOMXPath でこれを行うことができる場合があります。

$xpath = new DOMXPath($doc);
$node = /* your target node */;
$textnodes = $xpath->query("./preceding::*[contains(text(),'\n')]",$node);
$line = 1;
foreach($textnodes as $textnode) $line += substr_count($textnode->textContent,"\n");
// $line is now the line number of the node.

私はこれをテストしておらず、xpath で軸を使用したことがないことに注意してください。

于 2012-12-30T04:24:01.797 に答える