2011-02-07 19 views
1

私はコード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> 

とがありますどのように多くの値の明確な数を持っていませんが含まれたHTMLページを持っています。私は何をしたい、それは私が外部パーサーを使用する必要はありませんでした場合、それが最善だろう形式の時間/タイトル

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

のすべてが表示されるように結果をフォーマットすることです。あなたは私に助言できることを願っています:)

+0

を使用して私の問題を解決するために管理しました-1ベース?このデータは表として表現する必要があります。 – Quentin

+1

PHPを使用してHTMLを変換する理由を教えてください。 CSSを使用して、必要なプレゼンテーションにページのスタイルを設定します。 – Konerak

+2

私は本当に質問が何であるか分かりません。そのHTMLは入力または出力ですか? PHPはどこに入りますか? PHPでHTMLを解析して、そのデータを含むプレーンテキストファイルを出力しますか? – Quentin

答えて

0

この単純なケースでは、$text = strip_tags($html)を呼び出してください。その後$textは、次のようになります。あなたは、あなたが持っているHTMLは、常にあなたが示された正確なフォーマットでない場合

$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'; 
    } 
} 

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

は今すぐスペースを持つ他のすべての改行を置き換えるために、このような何かを行います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

私はすでに 'split_tags'関数を試しましたが、結果は実際には新しい行の代わりに' 00:30Headline News00:31Money Mind01:00Headline News'になります – Gary

+0

ああ...すべての改行の前にスペースを追加しようとしましたか? ?例えば。 'str_replace( '\ n'、 '\ n'、$ text)' –

+0

私はsimplexmlの例を追加しました。 –

0

レイアウトとタイポグラフィーを制御したい場合は、PHPではなくCSSを使用する必要があります。

+0

私は変数にHTMLコードを格納していてもPHPを使用して書式設定できません。別のサイトから結果(時間/タイトル)を取得しているので、HTML/CSSをフォーマットに使用することはできません。 – Gary

3

おかげで、あなたは時間の束を持っている、と名前の束、およびそれらが1対に相互に関連付けられている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>"; 
} 
} 

?> 
関連する問題