如何用PHP解析html中的字符串/单词?

时间:2012-11-09 06:50:46

标签: php xml dom xml-parsing html-parsing

我有像

这样的表格
<html>
  <body>
    <table id="data" class="outer">
        <tr><td>Date</td><td>12-09-12</td></tr>
        <tr><td>Price</td><td>15.00</td></tr>
        <tr><td>Count</td><td>67</td></tr>          
    </table>
  </body>
</html>

我必须解析这个以超过100的放弃 但是我无法知道“Date”“12-09-12”的值如何可以用数据库值中的新值替换。

请给我一个小例子

$html = new simple_html_dom();
$html->load_file($page);

$items = $html->find('Date');  

`

$s = '<html>
  <body>
    <table id="data" class="outer">
        <tr><td>Date</td><td>12-09-12</td></tr>
        <tr><td>Price</td><td>15.00</td></tr>
        <tr><td>Count</td><td>67</td></tr>          
 </table>
  </body>
</html>';
$document = new DOMDocument();
$document->loadHTML($s);

$oElement = $document->getElementById('data');
$tds = $oElement->getElementsByTagName('td');
if( 'td' == strtolower($tds->item(0)->tagName) AND 'date' == strtolower($tds->item(0)->nodeValue) )

{
    echo 'Old value: ' . $tds->item(1)->nodeValue;
    echo '<hr/>';

    $tds->item(1)->nodeValue = '13-08-11';
    echo $document->saveHTML(); //output modified HTML
}
?>

`任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

可以使用DOMDocument完成。

<?php
$s = '<html>
  <body>
    <table id="data" class="outer">
        <tr><td>Date</td><td>12-09-12</td></tr>
        <tr><td>Price</td><td>15.00</td></tr>
        <tr><td>Count</td><td>67</td></tr>          
    </table>
  </body>
</html>';

$document = new DOMDocument();
$document->loadHTML($s);

$oElement = $document->getElementById('data');
if($oElement)
{
    $tds = $oElement->firstChild->childNodes;
    if( 'td' == strtolower($tds->item(0)->tagName) AND 'date' == strtolower($tds->item(0)->nodeValue) )
    {
        echo 'Old value: ' . $tds->item(1)->nodeValue;
        echo '<hr/>';

        $tds->item(1)->nodeValue = '13-08-11';
        echo $document->saveHTML(); //output modified HTML
    }
}
else
{
    echo 'No elements found with id="data"';
}

答案 1 :(得分:1)

使用Simple HTML DOM包可以像这样完成。

$s = '<html>
  <body>
    <table id="data" class="outer">
        <tr><td>Date</td><td>12-09-12</td></tr>
        <tr><td>Price</td><td>15.00</td></tr>
        <tr><td>Count</td><td>67</td></tr>          
    </table>
  </body>
</html>';

include 'simple_html_dom.php';
$html = str_get_html($s);
$html->find('table#data tr td', 1)->innertext = '13-08-11';
echo $html;

table#data tr td选择器使用id="data"查找TABLE中TR标记内的所有TD标记。 $html->find('table#data tr td', 1)返回找到的第二个元素(索引为1)。

答案 2 :(得分:0)

<html>
  <body>
    <table id="data" class="outer">
        <tr><td>Date</td><td id="date">12-09-12</td></tr>
        <tr><td>Price</td><td>15.00</td></tr>
        <tr><td>Count</td><td>67</td></tr>          
    </table>
  </body>
</html>

在javascript中:

var date = <?=$_row['date']?>;
$('date').html('date');