1

Web サイトにログインする php スクリプトがあり、xpath クエリを実行して特定のタグを取得しようとしています。ページをローカルに保存して xpath を実行すると、すべてうまくいきます。ただし、サイトにログインして xpath を実行すると、タグの下部にある html コメントのみが返されます。だから - 私が持っている場合:

<html>
    <body>
        something here
        <!--comment here-->
    </body>
</html>

//html/body で xpath クエリを指定すると、「ここにコメント」のみが返され、他には何も返されません。

私は非常に混乱しており、このようなものを見たことがありません - 何かアイデアはありますか?

編集:これはcurlログイン後の私のphpです(これは成功しています)-それはかなり標準的です:

$file = REDACTED;
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//html/body/div[1]");

if (!is_null($elements)) {
  foreach ($elements as $element) {
    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      $out = $node->nodeValue;
    }
  }
}

echo $out;
4

2 に答える 2

2

ノードを正しく保存していません:

$out = '';
foreach ($elements as $element) {
    foreach ($element->childNodes as $node) {
        $out .= $doc->saveHTML( $node);
    }
}

あなたの元の問題はこれです:

$out = $node->nodeValue;

反復$outごとにオーバーライドされ続けるため、最後の値のみを取得します。上記のソリューションは、ノードの値を継続的に連結するため、それらすべてを取得できます。

于 2012-07-19T20:27:09.943 に答える
0

XPath 2.0 はcomment()、XML ファイル内のコメントにアクセスするための機能を提供します。コメントを取得したいノードにこの関数を追加するだけです。

以下の入力 xml フラグメントの場合

<html>
    <body>
        something here
        <!--comment here-->
    </body>
</html>

XPathは次のようになります

/html/body/comment()

これにより、テキストが取得されますcomment here。詳細については、こちらを参照してください。

于 2012-07-20T10:18:07.560 に答える