2

PHP で DOM をトラバースしているときに、次のエラーが発生します。

致命的なエラー: 未定義のメソッド DOMText::getAttribute() の呼び出し

私がやっていることは、DOM ノードを 1 つずつトラバースしていることです。しかし、特定の属性を取得できるような適切な DOM ノードを取得できない場合があります。DOMText ノードを取得しているため、常に ->nodeType==3 (DOM ノードではなく、->nodeType == 1) であるため、返された DOM ノードの属性を取得できません。

PHPで以下の構文を使用して次のDOMノードを取得しています

$node = $node->nextSibling;

場合によっては、このように以前のノードも取得する必要があります

$node = $node->previousSibling;

さて、私の質問は、適切なDOMノードを取得するにはどうすればよいですか?

以下の機能を試しました

function GetNode($oNode)
{
    while($oNode->nodeType != 1)
        $oNode = $oNode->previousSibling;
    return $oNode;
}

条件をチェックして(そのノードを使用した場所)のように

while($node && !empty($node) && $node->nodeType == 1 && !preg_match("/^Abc/",$node->getAttribute('class')))
{
    //further code
    $node = $node->nextSibling;
    $node = GetNode($node);
}

しかし、常にnodeType == 1を返し、ループを終了しないため、無限ループに陥るという問題が発生します。

4

1 に答える 1

4

テキスト ノードは、他の要素と同様に dom 要素です。これは、xml のタグ間にプレーン テキスト (改行文字など) があるために表示されます。そのため、nodeType を確認して、テキスト ノードをスキップする必要があります。

あなたのコードでは、"GetNode" 関数に誤りがあります: $oNode->previousSibling の代わりに $oNode->nextSibling を使用する必要があります。

PS 最新のブラウザーには、テキスト ノードをスキップする .nextElementSibling プロパティがあります;)

于 2013-08-03T21:45:57.330 に答える