1

一般的な HTML ファイルと一般的な XPath 式を受け入れる関数があります。HTMLタグを含むテキスト全体を含む一致したノードの文字列を抽出したい。簡単な例を次に示します...

<?php
$inDocStg = "
    <html><body>
    <div>The best-laid<br> schemes o' <span>mice</span> an' men
        <img src='./mouse.gif'><br>
    </div>
    </body></html>
    ";

$xPathDom = new DOMDocument();
@$xPathDom->loadHTML( $inDocStg );
$xPath = new DOMXPath( $xPathDom );
$matches = $xPath->query( "//div" );
echo $matches->item(0)->nodeValue;
?>

これにより生成されます(ブラウザ出力ではなく、生成されたHTMLソースを見ています)...

The best-laid schemes o' mice an' men

(HTML タグは削除されています)。

しかし、私が欲しいのは...

The best-laid<br> schemes o' <span>mice</span> an' men<img src='./mouse.gif'><br>

ありがとう。

4

3 に答える 3

0

これは機能しますが、XPath がなくても機能します。

$xPathDom = new DOMDocument();
$xPathDom->loadHTML( $inDocStg );
echo $xPathDom->saveXML($xPathDom->getElementsByTagName('div')->item(0));

また

$xPathDom = new DOMDocument();
$xPathDom->loadHTML( $inDocStg );
$xPathDom->getElementsByTagName('div')->item(0);
echo $xPathDom->saveHTML();
于 2010-09-13T14:25:43.177 に答える
0

この2つを試してみてください!

1

echo $matches->item(0)->textContent;

2

echo $matches->item(0);

最初のものはこのノードとその子孫のテキスト コンテンツを返し、2 つ目はマジック メソッドにアクセスしようとして__toString()います。DOMDocument の構築方法によっては、既に取得している値になる可能性があります。

于 2010-09-13T13:58:06.430 に答える
0

<pre>出力の周りのタグをラップするのはどうですか
echo "<pre>" . $matches->item(0)->nodeValue . "</pre>";

于 2010-09-13T13:37:49.017 に答える