【问题标题】:Find all like attributes in document, and change output based on value在文档中查找所有相似的属性,并根据值更改输出
【发布时间】:2013-01-23 09:57:23
【问题描述】:

我一直在处理这个列表,它将提供来自 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
    }

?>

我想要完成的是更改“状态”。不管元素是什么,“状态”只有两个值,并且总是“红色”或“蓝色”。我要做的是遍历整个文档,找到“状态”属性,查看值是否为“红色”,然后显示一个图标或一些文本,但如果它是蓝色的,则不显示任何内容。我遇到过不同的例子,但没有一个能表现出这种普遍性。大多数示例用于定位特定节点,然后显示它的属性。如果可能的话,我还试图避免在每个循环中创建此规则,而是将其应用于整个文档(如果这似乎是最好的方法。)

【问题讨论】:

  • 你想用 PHP 改变状态?还是JavaScript?如果是 PHP,你为什么用 javascript 标记你的问题?
  • 我正在寻找最合适的方法,无论是 PHP 还是 javascript。我不想更改该值,我只想根据该值控制 html 输出 - 幸运的是,Orbit 中的 Lightness Races 为我更改了标题。 :)
  • 如果只是为了美观,您可以使用条件样式。

标签: php javascript xml xml-parsing simplexml


【解决方案1】:

只需稍微更改您的代码即可将状态添加为您的 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;
}

或者类似的东西

【讨论】:

    【解决方案2】:

    使用 css 选择器而不是 javascript。这将使您的代码更轻松、更简单!

    例如:

    <?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 类的概念

    【讨论】:

    • 纯粹的美学修复并不是我的想法,但我绝对可以解决这个问题。我什至没有想到尝试将状态信息作为一个类输出。这是一个非常有创意的解决方案,谢谢你,Birla!
    猜你喜欢
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多