PHP - 在PHP标记内获取值

时间:2011-02-07 07:32:55

标签: php

我有一个包含代码的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> 

并且没有确定数量的值。我想要做的是格式化结果,以便以

格式显示所有时间/标题
00:30 Headline News
00:31 Money Mind
01:00 Headline News

如果我不必使用外部解析器,那将是最好的。排序新的PHP,希望你们可以建议我:)。

3 个答案:

答案 0 :(得分: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>";
}
}

?>

答案 1 :(得分:0)

如果您只想控制布局和排版,则必须使用CSS,而不是PHP。

答案 2 :(得分: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>)。