0

私は、xml ファイルからの情報を提供するこのリストに取り組んできました。私が使用しているマークアップは次のとおりです。

<?php
    $xml_file = '/path';
    $xml = simplexml_load_file($xml_file);

    foreach($xml->Continent as $continent) {
       echo "<div class='continent'>".$continent['Name']."<span class='status'>".$continent['Status']."</span>";
         foreach($continent->Country as $country) {
           echo "<div class='country'>".$country['Name']."<span class='status'>".$country['Status']."</span>";
              foreach($country->City as $city) {
                 echo "<div class='city'>".$city['Name']."<span class='status'>".$city['Status']."</span></div>";
              }
              echo "</div>"; // close Country div
         }
         echo "</div>"; // close Continent div
    }

?>

私が達成しようとしているのは、「ステータス」を変更することです。要素に関係なく、「ステータス」には 2 つの値しかなく、常に「赤」または「青」のいずれかになります。私がやろうとしているのは、ドキュメント全体を調べて「ステータス」属性を見つけ、値が「赤」かどうかを確認してから、アイコンまたはテキストを表示しますが、青の場合は何も表示しません. さまざまな例に出くわしましたが、このタイプの一般性を示すものはありません。ほとんどの例は、特定のノードを見つけてその属性を表示するためのものでした。また、可能であれば、各ループ内でこのルールを作成する必要を避けようとしていますが、代わりにドキュメント全体に適用します (これが最善の方法のように思われる場合)。

4

2 に答える 2

1

JavaScript の代わりに CSS セレクターを使用します。これにより、コードがより軽くシンプルになります。

例えば:

<?php
    $xml_file = '/path';
    $xml = simplexml_load_file($xml_file);

    foreach($xml->Continent as $continent) {
       echo "<div class='continent'>".$continent['Name']."<span class='status ". cssForStatus($continent['Status'])."'></span>";
         foreach($continent->Country as $country) {
           echo "<div class='country'>".$country['Name']."<span class='status ". cssForStatus($country['Status'])."'></span>";
              foreach($country->City as $city) {
                 echo "<div class='city'>".$city['Name']."<span class='status ". cssForStatus($city['Status'])."'></span></div>";
              }
              echo "</div>"; // close Country div
         }
         echo "</div>"; // close Continent div
    }

    function cssForStatus($status='')
    {
      switch ($status) {
        case 'red':
          $css = "red";
          break;

        default:
          $css = "blue";
          break;
      }
      return $css;
    }

あなたのCSSは次のようになります:

span.status {
    height: 10px;
    width: 10px;
}

span.status.red {
    background-color: "red";
}

span.status.blue {
    background-color: "blue";
}

複数のCSSクラスの概念を使用しています

于 2013-02-07T19:20:51.383 に答える
0

コードを少し変更して、ステータスを div クラスとして追加するだけです。

例:

echo "<div class='continent status-{$continent['Status']}'>{$continent['Name']}</div>";

これは出力されます(ヨーロッパという名前の赤い大陸の場合)

<div class='continent status-red'>Europe</div>

次に、この CSS を html に追加します。

.status-red {
    background-color: red;
}

.status-blue {
    background-color: blue;
}

または、これらの線に沿った何か

于 2013-02-07T19:34:05.920 に答える