2

.htmファイルでいっぱいのフォルダーを解析しようとしています。これらのファイルにはすべて、削除する必要のある特定の要素が1つ含まれています。が付いたtd要素class="hide"です。これまでのところ、これは私のコードです。 $dir. entryファイルへのフルパスです。

$page = ($dir . $entry);
$this->domDoc->loadHTMLFile($page);
// Use xpath query to find the menu and remove it
$nodeList = $xpath->query('//td[@class="hide"]');

残念ながら、これはすでに問題が発生している場所です。var_dumpノードリストを実行すると、次のようになります。

object(DOMNodeList)#5 (0) { } 

皆さんが私が何を選択しようとしているのかを理解できるように、ここに抜粋があります。

<td width="160" align="left" valign="top" class="hide">
    lots of other TD's and content here
</td>

私がこれまでに思いついたものに何か問題があると誰かが見ていますか?

4

3 に答える 3

5

xpathノードリストオブジェクトをVarダンプしても、何も表示されません。Varはノードリストの長さをダンプします。

var_dump($nodeList->length);

値が0を超える場合は、foreachを使用して値を繰り返すことができます。

foreach($nodeList as $node)var_dump($node->tagName);

お役に立てれば。

さらに明確にするために、ここに完全に機能するコードスニペットがあります:

<?php
$html = <<<END
<html>
    <body>
        <td>

        </td>
        <td class="hide"></td>
        <td class="hide"></td>
    </body>
</html>
END;
$dom = new DOMDocument;
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$nodeList = $xpath->query('//td[@class="hide"]');
// Shows a blank object
var_dump($nodeList);
// Shows 2
var_dump($nodeList->length);
// Echo out all the tag names.
foreach($nodeList as $node){
    echo $node->tagName . "\n";
}
?>
于 2012-10-02T13:27:09.250 に答える
5

あなたの最初のファイルはxhtmlですか(つまり、<html xmlns="http://www.w3.org/1999/xhtml">)?その場合、要素は名前空間になり、を使用してプレフィックスマッピングを設定してから$xpath->registerNamespace、式でこのプレフィックスを使用する必要があります。

$xpath->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml');
$nodeList = $xpath->query('//xhtml:td[@class="hide"]');
于 2012-10-02T15:41:44.913 に答える
3

要素のclass属性に複数のクラスがある可能性があります。td

<td class="hide anotherclass">

したがって'//td[@class="hide"]'、一致するのは次のとおりです。

<td class="hide">

hideこのようにして、探しているクラスが含まれているかどうかを確認してください。

$nodeList = $xpath->query('//td[contains(@class,"hide")]');

このブログ投稿をチェックしてください:XPath:クラスごとに要素を選択してください

于 2012-10-02T13:28:15.333 に答える