【问题标题】:How can I turn a xml string into a html table? [duplicate]如何将 xml 字符串转换为 html 表? [复制]
【发布时间】:2015-07-11 00:33:06
【问题描述】:

我有一个字符串,它提供了一个 XML 输出,现在我想捕获那个值。但问题是存在相同的变量,需要循环运行。

这是一种Shipping method活动跟踪,意味着逐步转移过程并输出

这是我得到的 XML:

<ArrayOfConsignmentTrack xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
    <ConsignmentTrack>
        <ERROR/>
        <DOCKNO>AB000000002</DOCKNO>
        <TRANSIT_LOCATION>ANDHERI BRANCH OFFICE, MUMBAI</TRANSIT_LOCATION>
        <ACTIVITY>In Transit to</ACTIVITY>
        <EVENTDATE>13 Apr 2015</EVENTDATE>
        <EVENTTIME>18:27:40</EVENTTIME>
        <NEXT_LOCATION>ANDHERI BRANCH OFFICE</NEXT_LOCATION>
        <TRACKING_CODE>T</TRACKING_CODE>
    </ConsignmentTrack>
    <ConsignmentTrack>
        <ERROR/>
        <DOCKNO>AB000000002</DOCKNO>
        <TRANSIT_LOCATION>OKHLA BRANCH, OKHLA</TRANSIT_LOCATION>
        <ACTIVITY>Picked up and Booking processed</ACTIVITY>
        <EVENTDATE>13 Apr 2015</EVENTDATE>
        <EVENTTIME>17:27:53</EVENTTIME>
        <NEXT_LOCATION/>
        <TRACKING_CODE>T</TRACKING_CODE>
    </ConsignmentTrack>
</ArrayOfConsignmentTrack>

现在我想要这样的输出:

我正在使用此代码获取值

$myXMLData = file_get_contents($URL);

$xml = (array)simplexml_load_string($myXMLData);
if($xml) {
    $dataArray = (array)$xml['ConsignmentTrack'];
    echo $DOCKNO = $dataArray['DOCKNO'];
    echo $TRANSIT_LOCATION =  $dataArray['TRANSIT_LOCATION'];
    echo $ACTIVITY =  $dataArray['ACTIVITY'];
    echo $EVENTDATE =  $dataArray['EVENTDATE'];
    echo $EVENTTIME =  $dataArray['EVENTTIME'];
    echo $NEXT_LOCATION =  $dataArray['NEXT_LOCATION'];
} else{
    echo "  -  Invalid Docket No.";
}

但它只给出一个值。我必须使用什么循环结构?

【问题讨论】:

  • 感谢 Sajan 的建议编辑 :)
  • 仅供参考:您可以接受对您帮助最大并解决您问题的答案(meta.stackexchange.com/q/5234)!如果有这样的答案,您也可以对所有其他问题执行此操作
  • 如果您还没有在 PHP 手册中找到这篇文章(看起来),这里是推荐阅读的链接:Basic SimpleXML usage。并且请考虑参考问题中给出的资源和信息,我关闭了你的这个问题,以免你下一个关于如何在 PHP 中解析和处理 XML 的 X 问题(或者至少你不会走得太远就像这里一样,你做的所有多余的数组强制转换可能会给你带来更多的问题)。

标签: php xml string foreach


【解决方案1】:

这应该适合你:

只需使用simplexml_load_string() 加载您的字符串,然后您可以:echo $xml-&gt;asXML(); 以查看 xml 的结构,然后查看您必须循环的位置。

<?php

    $xml = simplexml_load_string($myXMLData);  

    echo "<table border='1'>";
        echo "<tr>";
            echo "<td>Transit Location</td>";
            echo "<td>Activity</td>";
            echo "<td>Event Date</td>";
            echo "<td>Event Time</td>";
            echo "<td>next Location</td>";
        echo "</tr>";

    foreach($xml->ConsignmentTrack as $v) {
        echo "<tr>";
            echo "<td>" . $v->TRANSIT_LOCATION . "</td>";
            echo "<td>" . $v->ACTIVITY . "</td>";
            echo "<td>" . $v->EVENTDATE . "</td>";
            echo "<td>" . $v->EVENTTIME . "</td>";
            echo "<td>" . $v->NEXT_LOCATION . "</td>";
        echo "</tr>";
    }   

    echo "</table>";

?>

【讨论】:

  • 嗨 Rizier 感谢您的代码。无论如何我可以在不使用 file.xml 的情况下捕获 $xml 的值。实际上,我不想首先将数据放入 xml 文件中,然后运行该代码。 ?请告诉我 。非常感谢您的回复
  • @Lorry.B 查看我更新的代码。我将其更改为加载您的 xml 字符串变量。只需重新加载我的答案并再次尝试我的代码
  • 好的,让我试试,非常感谢您的即时回复。非常感谢..
  • @Lorry.B 那么我们有这个问题吗?它对你有用吗?
  • @Lorry.B 请注意,如果您提出的任何问题解决了,那么您可以接受他们的答案并将其标记为已解决。在此过程中,通知社区找到了解决方案。如果不这样做,您的问题将保留在 Stack 上的未回答类别中。访问以下链接meta.stackexchange.com/questions/5234/…,然后返回所有给出的答案并使用复选标记做同样的事情,直到它变成绿色。通过这样做,每个人都会受益,包括“你”。 ;-)
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 2012-08-23
  • 2012-05-23
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多