1

a.php:

<ul id="ul1">
    <li id="pt1">Point 1
         <ul id="ul2">
             <li id="pt11">Point 1.1</li>
             <li id="pt12">Point 1.2</li>
                <pre class="CodeDisplay">
                some codes
                </pre>
             <li id="ref">Reference: <a href="link.html" target="_blank">link</a></li>
         </ul>
    </li> 
</ul>

nodeValue「ポイント1」のみを取得したいと思います。JS では、次のようになります。

alert(document.getElementsByTagName("li")[0].childNodes[0].nodeValue);

しかし、PHP (Simple HTML Dom) で nodeValue を取得したいと思います。別の PHP ページ (b.php) のコード スニペットを次に示します。

<?php

include('simple_html_dom.php');
$html = file_get_html('http://lifelearning.net63.net/a.php');

// stuck here:
echo $html->getElementsByTagName('ul',0)->getElementsByTagName('li',0)->nodeValue;
//

?>

私は textContent を使用しましたが、ポイント 1 の下のコンテンツの子孫を抽出するだけです。これは私が望むものではありません。「ポイント1」だけ欲しい。どんな助けでも大歓迎です!

4

3 に答える 3

1

オンラインの他の人の助けを借りて、より簡単な解決策が提案されています:

$html = new DOMDocument();
$html->loadHTMLFile('http://lifelearning.net63.net/a.php');
echo $html->getElementsByTagName('li')->item(0)->childNodes->item(0)->textContent; // returns "Point 1"

私が学んだことは

まず、私の場合、外部ライブラリは必要ありません。DOMDocumentは、WebページのHTMLDOMを取得する役割を果たします。

次に、item()とchildNodesを使用します。JSの内容と非常によく似ています。

document.getElementsByTagName("li")[0].childNodes[0].nodeValue

しかし、すべての返信に感謝します。

于 2013-02-10T11:05:43.607 に答える
1

これを試して:

<?php
include('simple_html_dom.php');
$html = file_get_html('http://lifelearning.net63.net/a.php');
echo $html->find('li[id=pt1] li', 0)->innertext;

上記のスニペットは、最初の ( への降下li#pt1) 一致するliタグを見つけ、内部テキスト (テキスト間のコンテンツ、存在する場合はすべての HTML を含む) を提供します。

SimpleHTMLDom docsをご覧ください。HTML 出力からコンテンツ (ID、クラスなど) を見つける方法や例はたくさんあります。SimpleHTMLDom は、主に jQuery/CSS セレクターに従います。

メソッドを使用しない場合はinnertext、表示する前に処理する必要がある SimpleHTMLDom ノードが返されることに注意してください。

一致する要素がない場合は、E_WARNINGエラー メッセージが返されます。したがって、入力にrequire要素が含まれていることを確認するか、要素が存在することを確認してくださいisset()

于 2013-02-09T15:55:09.667 に答える
0

u may looking for this

 <?php  $str2 =     ' <ul id="ul1"> ' ;?>
 <?php  $str2 .=    '<li id="pt1"><div>Point 1</div> ' ;?>
 <?php  $str2 .=    ' <ul id="ul2"> ' ; ?>
 <?php  $str2 .=    '     <li id="pt11">Point 1.1</li>' ; ?>
 <?php  $str2 .=    '    <li id="pt12">Point 1.2</li>' ; ?>
 <?php  $str2 .=    '     <pre class="CodeDisplay">' ; ?>
 <?php  $str2 .=    '     some codes' ; ?>
 <?php  $str2 .=    '     </pre>' ; ?>
 <?php  $str2 .=    '    <li id="ref">Reference: <a href="link.html" target="_blank">link</a></li>' ; ?>
 <?php  $str2 .=    '  </ul>' ; ?>
 <?php  $str2 .=    '   </li> ' ; ?>
 <?php  $str2 .=    ' </ul>' ; ?>

 <?php

 function getTextBetweenTags($string, $tagname) {
     $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
     preg_match($pattern, $string, $matches);
     return $matches[1];
     }

   $txt = getTextBetweenTags($str2, "div");
   echo $txt;
   ?>

   will output : -->  Point 1 
于 2013-02-09T15:50:24.157 に答える