0

現在、このコードを使用してYahoo WeatherからRSSフィードを取得していますが、希望どおりにスタイルを設定したいのですが、方法がわかりません。

<?php
    $doc = new DOMDocument();
    $doc->load('http://xml.weather.yahoo.com/forecastrss/10013_f.xml');
    $channel = $doc->getElementsByTagName("channel");
    foreach($channel as $chnl)
    {
    $item = $chnl->getElementsByTagName("item");
    foreach($item as $itemgotten)
    {
    $describe = $itemgotten->getElementsByTagName("description");
    $description = $describe->item(0)->nodeValue;
    echo $description;
    }
    }
    ?>
4

2 に答える 2

0

@Michaelと言ったように、コードを次のように変更すると、次のようになります。

$doc = new DOMDocument();
$doc->load('http://xml.weather.yahoo.com/forecastrss/10013_f.xml');
$channel = $doc->getElementsByTagName("channel");
foreach($channel as $chnl){
    $item = $chnl->getElementsByTagName("item");
    foreach($item as $itemgotten) {
        $describe = $itemgotten->getElementsByTagName("description");
        $description = $describe->item(0)->nodeValue;
        echo "<div class='description'>" . htmlspecialchars($description) . "</description>";
    }
}

必要に応じて情報を表示するために必要なCSSを作成する必要があります。

于 2012-05-29T16:13:35.353 に答える
0

2つのオプションがあります:

オプション1

前の回答とは異なるアプローチ:実際のXMLファイルを見ると、同じ説明が個々のタグで囲まれていることもわかります。

<yweather:condition  text="Fair"  code="34"  temp="84"  date="Tue, 29 May 2012 6:49 pm EDT" />
<yweather:forecast day="Tue" date="29 May 2012" low="70" high="86" text="Partly Cloudy" code="30" />
<yweather:forecast day="Wed" date="30 May 2012" low="64" high="85" text="Scattered Thunderstorms" code="38" />
<yweather:forecast day="Thu" date="31 May 2012" low="56" high="75" text="Partly Cloudy" code="30" />
<yweather:forecast day="Fri" date="1 Jun 2012" low="63" high="69" text="Partly Cloudy" code="30" />
<yweather:forecast day="Sat" date="2 Jun 2012" low="59" high="70" text="Showers" code="11" />

このすべてのデータを個別にクエリして、必要なHTMLタグですべてをラップできない理由はありません。

たとえば、属性から属性を取得するには、次のようにconditions機能します。

<?php
$doc = new DOMDocument(); 
$doc->load('http://xml.weather.yahoo.com/forecastrss/10013_f.xml'); 
$channel = $doc->getElementsByTagName("channel"); 
foreach($channel as $chnl){ 
  $item = $chnl->getElementsByTagName("item"); 
  foreach($item as $itemgotten) { 
    $nodes = $itemgotten->getElementsByTagName('condition')->item(0);
    if ($nodes->hasAttributes()) {
      foreach ($nodes->attributes as $attr) {
        $name = $attr->nodeName;
        $value = $attr->nodeValue;
        echo "Attribute '$name' :: '$value'<br />";
      }
    }
  }
}
?>

オプション2

前の回答で提案されたアプローチを選択する場合は、説明内で使用されるHTMLタグのみを使用できることを忘れないでください(PHP内であらゆる種類の文字列操作を行う場合を除く)が、これらのタグを使用/スタイル設定することはできますCSSでカスケードスタイルを使用する:

div.description { /*general div styles*/ }
div.description b { /*styles for anything within a b tag in the description div*/ }
...

...等々

于 2012-05-29T16:18:30.053 に答える