【问题标题】:Using XML to populate table使用 XML 填充表
【发布时间】:2022-01-20 02:49:32
【问题描述】:

我正在尝试从 xml 文件中提取数据并将其显示在表格中,但结果并未如我所愿。我希望每个<tag> 都有来自每个<destinationSymbols> 列表的<string> 列表。但就目前而言,它只为每个<destinationSymbols> 返回第一个<string>

<?xml version="1.0"?>
<ArrayOfHighwayRoutingData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <HighwayRoutingData>
    <tag>I80</tag>
    <destinationSymbols>
      <string>SFO</string>
      <string>OAK</string>
      <string>EMR</string>
      <string>ELC</string>
      <string>RIC</string>
      <string>SPB</string>
    </destinationSymbols>
  </HighwayRoutingData>
    <HighwayRoutingData>
    <tag>SR24</tag>
    <destinationSymbols>
      <string>OAK</string>
      <string>ORI</string>
      <string>LFY</string>
      <string>WCR</string>
    </destinationSymbols>
  </HighwayRoutingData>
  <HighwayRoutingData>
    <tag>US101</tag>
    <destinationSymbols>
      <string>SFO</string>
      <string>SSC</string>
      <string>MIL</string>
      <string>PAO</string>
    </destinationSymbols>
  </HighwayRoutingData>

  </ArrayOfHighwayRoutingData>
<?php
$file = "RouteSymbol.xml";
if (file_exists($file)) {
$orders = simplexml_load_file($file,"SimpleXMLElement", LIBXML_NOERROR |  LIBXML_ERR_NONE) or die("Error: Cannot create object");
echo "<table border='1'>";
 foreach ($orders->xpath("//HighwayRoutingData") as $routingPoints){
    $tag=(string)$routingPoints->tag;
    //$string=(string)$routingPoints->string;
     echo "<tr>";
     echo "<td>".$tag."</td>";
 echo "</tr>";
     foreach($orders->xpath("//destinationSymbols") as $symbols){
     $string=(string)$symbols->string;
     echo "<tr>";
     echo "<td>".$string."</td>";
     echo "</tr>";
     /*foreach ($orders->xpath("//destinationSymbols". $tag . """) as $symbol){
    $string=(string)$symbol->string;
    echo "<tr>";
     echo "<td>".$string."</td>";
     //echo "</tr>";*/
}   
}
echo "</table>";
}else{
            echo "Invalid request!";
        } 

预期输出

+-------+
| I80   |
+=======+
| SFO   |
+-------+
| OAK   |
+-------+
| EMR   |
+-------+
| ELC   |
+-------+
| RIC   |
+=======+
+-------+
| SR24  |
+=======+
| OAK   |
+-------+
| ORI   |
+-------+
| LFY   |
+-------+
| WCR   |
+=======+
+-------+
| US101 |
+=======+
| SFO   |
+-------+
| SSC   |
+-------+
| MIL   |
+-------+
| PAO   |
+=======+

【问题讨论】:

  • 表达式开头的/ 表示它与文档相关,而不是当前上下文节点。试试.// 而不是//。此外,嵌套循环应该使用在外循环中找到的元素。
  • 您能否编辑问题并显示在给定示例 xml 的情况下您希望表格看起来如何?
  • @JackFleeting 我添加了预期的输出

标签: php xml


【解决方案1】:

尝试以下方法:

$orders = simplexml_load_string($data);
echo "<table border='1'>";
foreach ($orders->xpath(".//HighwayRoutingData") as $routingPoints){
    $tag=(string)$routingPoints->tag;
     echo "<tr><td><b>{$tag}</b></td>";
     foreach($routingPoints->xpath(".//destinationSymbols//string") as $symbol){
     $x = (string)$symbol;
     echo "<tr><td>{$x}</td></tr>";
} 
      echo "</tr>";
}
echo "</table>";

输出应该是您的预期输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2012-02-06
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    相关资源
    最近更新 更多