2

HTMLの例...

<html>
<head></head>
<body>
<table>
<tr>
    <td class="rsheader"><b>Header Content</b></td>
</tr>
<tr>
    <td class="rstext">Some text (Most likely will contain lots of HTML</td>
</tr>
</table>
</body>
</html>

HTMLのページをそのHTMLページのテンプレートバージョンに変換する必要があります。HTMLページはいくつかのボックスで構成されており、それぞれにヘッダー(上記のコードでは「rsheader」と呼ばれます)といくつかのテキスト(上記のコードでは「rstext」と呼ばれます)があります。

おそらくfile_get_contentsを使用してHTMLページを取得し、rsheaderおよびrstextdiv内にあるコンテンツを抽出するPHPスクリプトを作成しようとしています。基本的にどうしたらいいのかわからない!DOMを試してみましたが、よくわかりません。テキストを抽出することはできましたが、HTMLは無視されました。

私のPHP...

<?php

$html = '<html>
<head></head>
<body>
<table>
<tr>
    <td class="rsheader"><b>Header Content</b></td>
</tr>
<tr>
    <td class="rstext">Some text (Most likely will contain lots of HTML</td>
</tr>
</table>
</body>
</html>';

$dom = new DomDocument();
$dom->loadHtml($html);
$xpath = new DomXpath($dom);
$div = $xpath->query('//*[@class="rsheader"]')->item(0);
echo $div->textContent;

?>

print_r($ div)を実行すると、これが表示されます...

DOMElement Object
    (
    [tagName] => td
    [schemaTypeInfo] => 
    [nodeName] => td
    [nodeValue] => Header Content
    [nodeType] => 1
    [parentNode] => (object value omitted)
    [childNodes] => (object value omitted)
    [firstChild] => (object value omitted)
    [lastChild] => (object value omitted)
    [previousSibling] => 
    [nextSibling] => (object value omitted)
    [attributes] => (object value omitted)
    [ownerDocument] => (object value omitted)
    [namespaceURI] => 
    [prefix] => 
    [localName] => td
    [baseURI] => 
    [textContent] => Header Content
    )

ご覧のとおり、textContentノード内にHTMLタグがないため、間違った方法で処理していると思われます:(

誰かが私にこれについていくらかの助けを与えることができるかもしれないことを本当に望んでいます...

前もって感謝します

ポール

4

2 に答える 2

2

X-Pathは、おそらくこのタスクに必要なものよりも少し大ハンマーです。代わりに、DOMDocumentのgetElementById()メソッドを使用してみます。この投稿から採用された例を以下に示します。

注:要素IDの代わりにタグ名とクラス名を使用するように更新されました。

function getChildHtml( $node ) 
{
    $innerHtml= '';
    $children = $node->childNodes;

    foreach( $children as $child )
    {
        $innerHtml .= sprintf( '%s%s', $innerHtml, $child->ownerDocument->saveXML( $child ) );
    }

    return $innerHtml;
}

$dom = new DomDocument();
$dom->loadHtml( $html );

// Gather all table cells in the document.
$cells = $dom->getElementsByTagName( 'td' );

// Loop through the collected table cells looking for those of class 'rsheader' or 'rstext'.
foreach( $cells as $cell )
{
    if( $cell->getAttribute( 'class' ) == 'rsheader' )
    {
        $headerHtml = getChildHtml( $cell );
        // Do something with header html.
    }

    if( $cell->getAttribute( 'class' ) == 'rstext' )
    {
        $textHtml = getChildHtml( $cell );
        // Do something with text html.
    }
}
于 2013-02-21T15:18:34.123 に答える
0

この回答を見て、ガイドラインとして使用してください: Webサイトから特定のデータを取得する

詳細なヘルプが必要な場合は、私がお手伝いします。

于 2013-02-21T15:14:50.823 に答える