2011-12-16 12 views
2

私は一日中DOM XPathを使いこなしています。だから、最後の手段、あなたたちに頼んでください - プロ!PHP Dom XPath - なぜ機能していないのですか?

私がしようとしているのは、all the titles of threads hereの(配列内の)検索です。

私はそれを行うためにXPathを使用しようとしています(誰かが私により良い方法を教えない限り)。

$list3 = $xpath3 
    ->evaluate("//a[contains(@style, 'font-weight:bold') and 
    contains(@href, 'showthread.php?t=3499047')]"); 

しかし何も取得していない取得され

+0

あなたが読んだスレッド(つまりリンクに続くスレッド)はもはや太字ではありませんが、それは問題ですか? – AakashM

+0

私は表現がきついと思う、あなたはスタイルの節を削除しようとすることはできますか?そして、hrefの比較はパスなしで '?t = 3499047'に変わります。 – ajreal

答えて

2

結果が得られない理由は、両方の条件を満たす要素が<a>でないためです。

これらは@hrefに「3499047」を含むリンクです:

<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047" id="thread_title_3499047">Tesco misprices and discussion (Thread 12)</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047">1</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=2">2</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=3">3</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=110">Last Page</a> 
<a href="member.php?s=9bc55ab5990282a5353fb20d505d577e&amp;find=lastposter&amp;t=3499047" rel="nofollow">ExiledCockney</a> 
<a href="misc.php?do=whoposted&amp;t=3499047" onclick="who(3499047); return false;">2,184</a> 
<a rel="shadowbox;width=732;height=527;player=iframe;" href="wow.php?t=3499047" target="_blank" style="display: block; width: 100%; height: 100%; cursor: pointer;"> 
     <div style="width: 100%; height: 100%; background-image: url('http://images2.moneysavingexpert.com/images/forum_style_2/misc//wow_big_faint_grey.gif');"> 
      <div style="padding: 12px 0px 0px 0px;"> 
       <strong>3</strong> 
      </div> 
     </div> 
    </a> 

あなたが見ることができるように、それらのどれもが「『フォント重量:太字』」を含まないスタイル属性に。

ページのマークアップに、ブラウザで表示したときに目的の組み合わせの要素がある場合は、javascriptで追加されている可能性があります。 DOMはJavaScriptを実行しないため、DOMで取得したマークアップを確認する必要があります。

+0

ああ、はい、まったく別のHTMLソースがあります。なぜなら、私がログインしているからだろう。だからなぜ大胆なフォントが見えているのだろうか。ありがとう!それは本当に瞬間です。 –

+0

私は今(id属性を使って)働いています - ありがとう!別の簡単な質問 - t = xxxxxxxxの値を引き出す方法はありますか?例えばそれ以上はt = 3499047 –

+0

@cudは@hrefの値に 'parse_url'を使います。クエリ文字列に複数の引数がある場合は、 'parse_str'を使います。 – Gordon

0

:現在、私はちょうど私のコードが動作しているかどうかをチェックする(!明確ではない...)

を私が使用しているだけで1タイトルを取得しようとしていますDOMがhtml上でbarfingしていないことを確認してください。間違った形式のhtmlについては非常に厄介です。ページをロードした直後に->saveHTML()コールが生成するものを参照してください。異なる/切り捨てられたものが出た場合、入力が不正であり、最初にクリーンアップする必要があります。

+0

それほど大変ではありません。 – Gordon

0

私はそのhtmlを見ましたが、そのhrefにはstyle="font-weight: bold;"のリンクもありません。私は実際にページ上に大胆なリンクが表示されていません。とにかく、私がその状態を取り除くと、私はevaluate()から5つのDOMElementsを取得します。

関連する問題