尝试使用PHP将SimpleXMLObject转换为HTML

时间:2013-11-28 17:25:01

标签: php html xml-parsing

这是我第一次使用SimpleXMLobject,所以我有一个XMLstring,看起来像这样:     

"<Body><SoapResponse><response><code>0</code><message>Success</message><id>123</id></response><details><a>123</a><b>ABC</c><d>1</d><e>XYZ</e><f>df</f><g>1</g><h>10</h></details><secondarydetails><box1><boxname>wer</boxname><date>2013-11-29</date><expirydate>2013-12-29</expirydate><flag>S</flag></box1><box2><boxname>pos</boxname><date>2013-11-29</date><expirydate>2013-12-29</expirydate><flag>E</flag></SoapResponse></Body>"

我正在尝试解析并将其转换为html格式,最好是html表格,但我发现只有以下代码:

<pre><code>$xml = simplexml_load_string($soapresponse);
           function writeList($items){
           if($items === null)
           return;
           echo '&lt;ul&gt;';
           foreach($items as $item =&gt $children){
           echo '&lt;li&gt;'.$item;
           writeList($children);
           echo '&lt;/li&gt;';
           }
           echo '&lt;/ul&gt;';
           writeList($xml);</code></pre>   

但是显示的html只是标签,没有像这样的值:

  • SoapResponse
    • 响应
  • 消息

有人可以帮忙解决这个问题吗?如果我能以表格形式提供它会很棒,非常感谢你的支持。

2 个答案:

答案 0 :(得分:0)

当你致电

$xml = simplexml_load_string($soapresponse);

然后返回一个simpleXMLElement。如此处的PHP文档中所示:

http://www.php.net/manual/en/class.simplexmlelement.php

这可能会让你更近一点:

$xml = simplexml_load_string($soapresponse);

// You need to build the table wrapper first
echo '<table>';

// The recursive function
function writeList($items){
    if($items === null)
        return;
    echo '<tr>';
    foreach($items->children() as $i => $child){
        echo '<td>', $child->getName(), '</td><td>', (string)$child, '</td>';
        writeList($child);
    }
    echo '</tr>';
}
writeList($xml);

echo '</table>';

它会像这样生成一个表:

response    
code    0
message Success
id  123
details 
a   123
b   ABC
d   1
e   XYZ
f   df
g   1
h   10
secondarydetails    
box1    
boxname         wer
date            2013-11-29
expirydate  2013-12-29
flag            S
box2    
boxname     pos
date            2013-11-29
expirydate  2013-12-29
flag            E

答案 1 :(得分:0)

在您的XML字符串中,错过了开始和结束标记,并且要将xml解析为HTML,您可以使用SimpleXMLElement。它将xml转换为html,如下面的代码。

   <?php
    $news=new SimpleXMLElement('
    <Body><SoapResponse><response><code>0</code><message>Success</message><id>123</id></response><details><a href="#">123</a><b>ABC</b><d>1</d><e>XYZ</e><f>df</f><g>1</g><h>10</h></details><secondarydetails><box1><boxname>wer</boxname><date>2013-11-29</date><expirydate>2013-12-29</expirydate><flag>S</flag></box1><box2><boxname>pos</boxname><date>2013-11-29</date><expirydate>2013-12-29</expirydate><flag>E</flag></box2></secondarydetails></SoapResponse></Body>');
    print_r($news);
    ?>

有关详细信息,请参阅simplexmlelement