2017-05-25 8 views
0

私はxPathsを含むいくつかの練習アプリケーションと他のWebサイトからの要素の取得に取り組んでいます。DomxPathクエリでノードリストが返されない

DomXpathを使用しましたが、結果またはノードリストを返さない。

ここでは、コードです:

$DOM = new DOMDocument(); 
@$DOM->loadHTML($html); 
$xpath = new DOMXPath($DOM); 
$nodes = $xpath->query("//span[contains(@style,'font-size:25px;')]"); 
foreach ($nodes as $node) { 
    echo $node->nodeValue; 
} 

例のページのソース:

<div class="front-view-content full-post"> 
    <p> 
     <span style="font-size:25px; color:#98293D;">RED</span><br> 
     <span style="font-size:25px; color:#98293D;">BLUE</span><br> 
     <span style="font-size:25px; color:#98293D;">WHITE</span></p> 
    </div> 

は、それが単なる空白は何も返しません。

答えて

0

セミコロンはありません。ソースでは、xpathが一致しません。

$nodes = $finder->query('//span[@style="font-size:25px"]'); 

は、これが唯一の正確your search stringに一致するstyle属性が一致するよう、特定の値は、ちょうど[@style="your search string"]を行うよりも少し複雑です含む属性に一致するようにしようと

+0

更新された例を見ると動きません –

+1

xpathクエリのスタイルは、HTMLコードのスタイルと完全に一致する必要があります。 –

0

を動作するはずです。文字列が別の文字列が含まれているかどうかをテストするためにあなたが[@style*="your search string"][@style~="your search string"]を行うことができます

私の知る限りでは、インスタンスのためのCSSでのものと同様のxpathには速記のセレクタは、ありません、など

、あなたが使用contains()機能。あなたは、XPathクエリが続いています例は、に変換されるている:そのマッチングは、このようなclass="nav main"でクラスmainに一致するようにワード境界あなたがする場合は、(で、文字列を分離しても

//span[contains(@style,"font-size:25px;")]

は注意してください、しかし、例えばclass="nav maintenance"ではなく)、少し複雑になります。このような例についてはto this answerを紹介します。

+0

これも機能しません。私は空白のページの結果を取得します。私はあなたが提案したxpathクエリを使用しました –

+0

@GerardSantosその後、 '$ DOM-> loadHTML($ html);'の前にある '@'を削除し、PHPに実際のエラーを表示させますあなたが表示したHTMLが有効なHTMLである大きなページのスニペットである場合、テストしたばかりなので、うまくいくはずです。無効なHTMLを 'DOMDocument'で読み込む方法が不明な場合は、新しい質問をしたり、StackOverflowを検索したりすることをお勧めします。おそらくそのような質問は既に答えられているでしょう。 –

関連する問題