2

最近、XPath のツールを使い始めました。現在、いくつかのページを行ごとに解析し、関連するテキストを取得しています。

私がやりたいのはdiv、上部の a を除外し、それは子要素です。

基本的に私はこれを見ています:

<html>
  <head> Foo </head>
  <body>

    <div id='header'>
      <ul id='menu'> <li> Bar </li> <li> FooBar </li> <li> BarFoo </li> </ul>
    </div>

    <table> <tr> <td>data</td><td>data</td> </tr> </table>

    <div>
      <p>Lorem Ipsum</p>
      <p>dolor sit amet</p>
    </div>

  </body>
</html>

はるかに多くのコンテンツを除いて。

現在、次のようにすべてのノードをループします。

$dom = new DOMDocument;
$dom->loadHTMLFile('http://www.test.com/test.htm');

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('/html/body//*');

foreach($nodes as $node) {
  echo $node->nodeValue;
}

ヘッダー ノード全体を無視したい。

それを行う簡単な方法はあります

4

1 に答える 1

3

これはうまくいきます:

/html/body//*[not(ancestor-or-self::div[@id="header"])]

XPath は、「header」の id 属性値を持つ DIV の祖先またはその div 自体でない限り、body 要素の下のすべてのノードを選択します。

XPath チュートリアルについては、http://schlitt.info/opensource/blog/0704_xpath.htmlを確認してください。

于 2013-10-13T17:47:10.783 に答える