【问题标题】:trying to echo xml data to html table with php试图用 php 将 xml 数据回显到 html 表
【发布时间】:2013-10-11 07:38:11
【问题描述】:

所以除了一件事之外,我几乎得到了我想要的输出。我似乎无法弄清楚如何使用 PHP 在 HTML 表格内的新行上打印我的 XML 文件的特定部分来回显它。

在 PHP 方面我不是最厉害的,但我觉得涉猎很有趣。至于我目前的代码,我将发布我的 PHP 部分。

<?php
$file="badscifimovies.xml";
$xml = simplexml_load_file($file) or die ("no load");
echo <<<EOF
<table>
  <tr>
    <th>Title</th>
    <th>Year</th>
    <th>Producers/Director</th>
    <th>Stars</th>
    <th>Budget</th>
    <th>MST3000</th>
  </tr>
EOF;
foreach($xml->movie as $movie){
  echo "<tr>";
  echo "<td>{$movie->title}</td>";
  echo "<td>{$movie->year}</td>";
  echo "<td>{$movie->director->producer}</td>";
  foreach($movie->stars->star as $stars){
    echo "<td>{$stars[0]}</td>";
  }
  echo "<td>{$movie->budget}</td>";
  echo "<td>{$movie->mst}</td>";
  echo "<br />";
  echo "</tr>";
}
echo '</table>';
?>

我正在寻找的输出是“星星”部分。 我得到的 XML 部分是这样的:

<stars>
  <star>Name One</star>
  <star>Name two</star>
  <star>Name three</star>
</star>

我似乎无法将其中的每一个都打印在单独的行上。我的所有其他代码都可以很好地打印出 XML 文档的其余部分(可能是因为每部电影有 1 个元素)。对于星星部分,它会并排打印所有三颗星星,但会将我的每个电影部分打印在应有的新行上。

任何帮助将不胜感激。如果您需要我提供更多信息,我会发布更多信息。

【问题讨论】:

  • 你能粘贴更宽的部分用过的 XML 吗?

标签: php html xml


【解决方案1】:

XML 文件 (employee.xml)

<root>
<person>
    <sno>1</sno>
    <name>person1</name>
    <phno>098687667</phno>
</person>
<person>
    <sno>2</sno>
    <name>person2</name>
    <phno>897876756</phno>
</person>
<person>
    <sno>3</sno>
    <name>person3</name>
    <phno>986875675</phno>
</person>

PHP 代码

<body>
<?php
$xml = simplexml_load_file("employee.xml")
or die("Error: Cannot create object");

$element_name = array();                                    //get all xml element name
foreach ($xml->children()->children() as $value) {
$element_name[] = $value->getName();
}
?>
<table border = "1">
<thead>
<tr>
<?php
foreach ($element_name as $value) {             //display table head
echo "<th>{$value}</th>";
}
?>
</tr>
</thead>

<tbody>
<?php
foreach ($xml->children() as $value) {              //display table data
echo "<tr>";    
for ($i = 0; $i < count($element_name); $i++) {
echo "<td>{$value->children()->$element_name[$i]}</td>";
}
echo "</tr>";
}
?>
</tbody>
</table>
</body>

【讨论】:

    【解决方案2】:
    foreach($xml->movie as $movie){
      echo "<tr>";
      echo "<td>{$movie->title}</td>";
      echo "<td>{$movie->year}</td>";
      echo "<td>{$movie->director->producer}</td>";
      echo "<td>";
      foreach($movie->stars->star as $stars){
        echo $stars[0] . '<br/>';
      }
      echo "</td>";
      echo "<td>{$movie->budget}</td>";
      echo "<td>{$movie->mst}</td>";
      echo "<br />";
      echo "</tr>";
    }
    

    我认为这应该可行。您正在为每颗星创建一个新的 &lt;td&gt; 元素,但您只有一个对应的 &lt;th&gt; 标记。

    【讨论】:

    • 哈哈,太好了!谢谢你。就像所有的编程一样,必须有一种非常简单的修复方法,它会被仔细检查,直到有人仔细检查。再次感谢你。效果很好!
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多