2011-02-07 74 views
1

我有一个HTML页面,其中包括代码PHP - PHP标签中获取价值

<li><span class="li-time">00:30</span> 
<span class="li-title">Headline News</span></li> 
<li><span class="li-time">00:31</span> 
<span class="li-title">Money Mind</span></li> 
<li><span class="li-time">01:00</span> 
<span class="li-title">Headline News</span></li> 
<li><span class="li-time">01:01</span> 
<span class="li-title">Singapore Tonight</span></li> 

,并没有多少价值有一定的数量。我想做的事就是这样,它显示所有的时间/标题的格式

00:30 Headline News 
00:31 Money Mind 
01:00 Headline News 

,如果我没有使用外部解析器这将是最好的格式化结果。 Sorta新的PHP,希望你们可以告诉我:)

+0

我的问题,那么你有一大堆的时间,和一堆名字,他们彼此在1对相关-1基础?这些数据应该用表格表示。 – Quentin 2011-02-07 07:35:18

+1

为什么你想用PHP来转换HTML?使用CSS将页面设置为您想要的演示文稿。 – Konerak 2011-02-07 07:36:26

+2

虽然我不确定问题是什么。该HTML是输入还是输出? PHP进入它的哪里?你想用PHP解析HTML,然后用数据输出一个纯文本文件? – Quentin 2011-02-07 07:36:29

回答

0

在这种简单的情况下,只需拨打$text = strip_tags($html)即可。然后$text看起来是这样的:

00:30 
Headline News 
00:31 
Money Mind 
01:00 
Headline News 

现在做这样的事情,以取代所有其他新行与空间:

$lines = explode('\n',$text); 
$final_text = ''; 
for ($i=0;$i<count($lines);$i++) { 
    $final_text .= $lines[$i]; 
    if ($i%2==0) { 
    $final_text .= ' '; 
    } else { 
    $final_text .='\n'; 
    } 
} 

如果你有HTML并不总是精确你已经证明,你的格式将不得不使用SimpleXML或更复杂的DOM functions解析HTML。使用SimpleXML将以下

一个例子:

$html = <<<EOF 
<html> 
<li><span class="li-time">00:30</span> 
<span class="li-title">Headline News</span></li> 
<li><span class="li-time">00:31</span> 
<span class="li-title">Money Mind</span></li> 
<li><span class="li-time">01:00</span> 
<span class="li-title">Headline News</span></li> 
<li><span class="li-time">01:01</span> 
<span class="li-title">Singapore Tonight</span></li> 
</html> 
EOF; 

$sx = simplexml_load_string($html); 

$output_text = ''; 
foreach($sx->li as $list_item) { 
    $output_text .= $list_item->span[0] . " " . $list_item->span[1] . "\n"; 
} 

echo $output_text; 

请注意,$ HTML必须使用一些标签来包裹(我在本例中选择<html></html>)。

0

如果你只是想控制布局和印刷术,你必须使用CSS,而不是PHP。

3

感谢所有的建议人,设法解决使用DOM

<?php 


$data = file_get_contents("html"); 


$pattern = '/<ul id="schedule">.*<\/ul>/'; 
preg_match($pattern, $data, $matches); // to obtain sample code (<li><span...>) 


function getTextBetweenTags($string, $tagname){ 
    $d = new DOMDocument(); 
    $d->loadHTML($string); 
    $return = array(); 
    foreach($d->getElementsByTagName($tagname) as $item){ 
     $return[] = $item->textContent; 
    } 
    return $return; 
} 

$count = 0; 
$txt = getTextBetweenTags($matches[0], "span"); 
foreach ($txt as $val){ 
$count++; 
echo $val; 
echo "\t"; 
if (($count % 2) == 0){ 
    print "<br>"; 
} 
} 

?>