0

次の HTML セグメントがあります。

xPath クエリがアンカー <a> タグのリストを返さない HTML セクションのスクリーン ショット

次のxPathクエリを使用して、DIV内のすべてのアンカータグを取得するために、PHPでDOMを使用してxPathを使用しています。

//div[@id="breadcrumbs"]/a

上記のクエリは、すべてのアンカー タグの NodeList を返すはずです。上記の HTML の場合、これは 3 になるはずです。何も得られず、次の PHP コードがスキップされます

        $breadCrumb = $xpath->query('//div[@id="breadcrumbs"]/a');      

    if($breadCrumb->length){
        $ctr = 0;
        $sections = "";
        foreach($breadCrumb as $section){
            //$productBreadCrumb['section_'.$ctr] =  $section->nodeValue;
            $sections .=  $section->nodeValue."|";
            $ctr++;
        }
        $productData['sections'] = $sections;
    }

ここでガイダンスが必要です。非常に高く評価。

編集: 上記の Div id="breadcumbs"> aaa のセグメントで xPath クエリに基づいて DOM からフェッチしようとしているページを追加しました

http://www.5starhookah.com/Apex-Black-NEW-A342.htm

ありがとう

ありがとう

4

2 に答える 2

4

xpath に関する通常の落とし穴: 名前空間。

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

すべてのタグが実際にはhttp://www.w3.org/1999/xhtml名前空間にあることを意味します。

ドキュメントを参照して、デフォルトの名前空間を設定できるかどうか、またはエイリアスを設定できるかどうかを確認します (たとえば、エイリアス名が「x」の場合、クエリは //x:div[@id="breadcrumbs"]/x のようになります)。 :あ。

または、xml を解析する前に、文字列 « xmlns="http://www.w3.org/1999/xhtml" » を削除してごまかすこともできます。

于 2012-04-26T23:00:08.023 に答える
2

次のようなサンプル XHTML を使用するとわかるように、XPath は正しいです。

<div id="breadcrumbs">
<a class='breadcrumb'>Our Products</a>
</div>

次のようなツールを使用: http://www.xpathtester.com/

したがって、問題は DOM にあるはずです。XPath を実行する直前の DOM の XHTML の印刷物を貼り付けることができれば、それと同じくらい確認できますが、何か非常に奇妙なことがなければ、DOM に問題があることは明らかです。

于 2012-04-26T21:17:46.073 に答える