Heim > Backend-Entwicklung > PHP-Tutorial > Wie analysiert PHP eine solche XML-Datei?

Wie analysiert PHP eine solche XML-Datei?

WBOY
Freigeben: 2016-08-04 09:22:20
Original
965 Leute haben es durchsucht

<code><?xml version="1.0" encoding="utf-8"?>
<Order DeliveryNo="PH00127495JP">
    <Status>
        <State StateDate="2016-06-28 11:37:47" StateMessage="亲,您的包裹已入库完成,祝您海淘愉快!" StateOperator="PH002JP" />
        <State StateDate="2016-06-29 12:32:13" StateMessage="亲,您的包裹已安排极速转运!" StateOperator="PH002JP" />
        <State StateDate="2016-07-02 09:16:58" StateMessage="亲,您的包裹已到达HK分拨中心,等待清关中!" StateOperator="PH005CN" />
        <State StateDate="2016-07-04 09:32:16" StateMessage="亲,您的包裹已清关完毕!" StateOperator="PH006CN" />
    </Status>
</Order>
//以上xml内容如何获取时间等信息,我试了simplexml_load_string函数,解析失败。
--------------------------------------------------------------------------------
还有就是上面是print_r输出的内容,而var_dump输出的是这样的

    D:\WWW\demo\demo\order.php:24:string '&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;Order DeliveryNo=&quot;PH00127495JP&quot;&gt;
    &lt;Status&gt;
        &lt;State StateDate=&quot;2016-06-28 11:37:47&quot; StateMessage=&quot;亲,您的包裹已入库完成,祝您海淘愉快!&quot; StateOperator=&quot;PH002JP&quot; /&gt;
        &lt;State StateDate=&quot;2016-06-29 12:32:13&quot; StateMessage=&quot;亲,您的包裹已安排极速转运!&quot; StateOperator=&quot;PH002JP&quot; /&gt;
        &lt;State Stat'... (length=877)
//simplexml_load_string函数直接报错,说Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '&lt;' not found in D:\WWW\demo\demo\order.php on line 36
跪求大神赐教!!
---------------------------------------------------------------------------
    这些是php处理的代码。麻烦大神了。
 $delivery = trim($_POST['delivery']);
$t = $_POST['t'];
$encrypt = $_POST['encrypt'];
$Source = trim($delivery.$encrypt.$t);

    $Source = strtoupper(md5($Source));
    //$Source = trim($_POST['Source']);
    //$Source = strtoupper(md5($Source));
    $data['delivery'] = $delivery;
    $data['t'] = $t;
    $data['encrypt'] = $encrypt;
    $data['Source'] = $Source;
    
    $url = 'http://www.ipehua.com/IWendaAPI/IGetDeliveryAPI.ashx';
    //$xml_content = send_post($url,$data);
    
    $curl = curl_init();
    
    curl_setopt_array($curl, Array(
        CURLOPT_URL            => $url,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_ENCODING       => 'UTF-8',
        CURLOPT_POSTFIELDS     => $data
    ));
    
    $xml_content = curl_exec($curl);
    curl_close($curl);</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

<code><?xml version="1.0" encoding="utf-8"?>
<Order DeliveryNo="PH00127495JP">
    <Status>
        <State StateDate="2016-06-28 11:37:47" StateMessage="亲,您的包裹已入库完成,祝您海淘愉快!" StateOperator="PH002JP" />
        <State StateDate="2016-06-29 12:32:13" StateMessage="亲,您的包裹已安排极速转运!" StateOperator="PH002JP" />
        <State StateDate="2016-07-02 09:16:58" StateMessage="亲,您的包裹已到达HK分拨中心,等待清关中!" StateOperator="PH005CN" />
        <State StateDate="2016-07-04 09:32:16" StateMessage="亲,您的包裹已清关完毕!" StateOperator="PH006CN" />
    </Status>
</Order>
//以上xml内容如何获取时间等信息,我试了simplexml_load_string函数,解析失败。
--------------------------------------------------------------------------------
还有就是上面是print_r输出的内容,而var_dump输出的是这样的

    D:\WWW\demo\demo\order.php:24:string '&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;Order DeliveryNo=&quot;PH00127495JP&quot;&gt;
    &lt;Status&gt;
        &lt;State StateDate=&quot;2016-06-28 11:37:47&quot; StateMessage=&quot;亲,您的包裹已入库完成,祝您海淘愉快!&quot; StateOperator=&quot;PH002JP&quot; /&gt;
        &lt;State StateDate=&quot;2016-06-29 12:32:13&quot; StateMessage=&quot;亲,您的包裹已安排极速转运!&quot; StateOperator=&quot;PH002JP&quot; /&gt;
        &lt;State Stat'... (length=877)
//simplexml_load_string函数直接报错,说Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '&lt;' not found in D:\WWW\demo\demo\order.php on line 36
跪求大神赐教!!
---------------------------------------------------------------------------
    这些是php处理的代码。麻烦大神了。
 $delivery = trim($_POST['delivery']);
$t = $_POST['t'];
$encrypt = $_POST['encrypt'];
$Source = trim($delivery.$encrypt.$t);

    $Source = strtoupper(md5($Source));
    //$Source = trim($_POST['Source']);
    //$Source = strtoupper(md5($Source));
    $data['delivery'] = $delivery;
    $data['t'] = $t;
    $data['encrypt'] = $encrypt;
    $data['Source'] = $Source;
    
    $url = 'http://www.ipehua.com/IWendaAPI/IGetDeliveryAPI.ashx';
    //$xml_content = send_post($url,$data);
    
    $curl = curl_init();
    
    curl_setopt_array($curl, Array(
        CURLOPT_URL            => $url,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_ENCODING       => 'UTF-8',
        CURLOPT_POSTFIELDS     => $data
    ));
    
    $xml_content = curl_exec($curl);
    curl_close($curl);</code>
Nach dem Login kopieren
Nach dem Login kopieren

<code><?php


$xml = '<?xml version="1.0" encoding="utf-8"?>
<Order DeliveryNo="PH00127495JP">
    <Status>
        <State StateDate="2016-06-28 11:37:47" StateMessage="亲,您的包裹已入库完成,祝您海淘愉快!" StateOperator="PH002JP" />
        <State StateDate="2016-06-29 12:32:13" StateMessage="亲,您的包裹已安排极速转运!" StateOperator="PH002JP" />
        <State StateDate="2016-07-02 09:16:58" StateMessage="亲,您的包裹已到达HK分拨中心,等待清关中!" StateOperator="PH005CN" />
        <State StateDate="2016-07-04 09:32:16" StateMessage="亲,您的包裹已清关完毕!" StateOperator="PH006CN" />
    </Status>
</Order>
';

$xml = simplexml_load_string($xml);


$xml = json_decode(json_encode($xml),TRUE);

echo "DeliveryNo=>",$xml['@attributes']['DeliveryNo'],"<br>";

$state = $xml['Status']['State'];

foreach ($state as $key => $value) {
    print_r($value['@attributes']);
    echo "<br>";
}</code>
Nach dem Login kopieren

PHP 5.6.22 通过。

https://3v4l.org/JZ3UP

<code>$xml_string = '<?xml version="1.0" encoding="utf-8"?>
<Order DeliveryNo="PH00127495JP">
    <Status>
        <State StateDate="2016-06-28 11:37:47" StateMessage="亲,您的包裹已入库完成,祝您海淘愉快!" StateOperator="PH002JP" />
        <State StateDate="2016-06-29 12:32:13" StateMessage="亲,您的包裹已安排极速转运!" StateOperator="PH002JP" />
        <State StateDate="2016-07-02 09:16:58" StateMessage="亲,您的包裹已到达HK分拨中心,等待清关中!" StateOperator="PH005CN" />
        <State StateDate="2016-07-04 09:32:16" StateMessage="亲,您的包裹已清关完毕!" StateOperator="PH006CN" />
    </Status>
</Order>';
libxml_disable_entity_loader(true);
$obj = simplexml_load_string($xml_string, 'SimpleXMLElement', LIBXML_NOCDATA);

print_r($obj);

echo $obj->attributes()->DeliveryNo;</code>
Nach dem Login kopieren

PHP处理XML有几种方式,DOM、XMLReader/Writer、XSL,建议你用后两种,DOM相对耗内存。

<code><?php
$a = <<<EOF
<?xml version="1.0" encoding="utf-8"?>
<Order DeliveryNo="PH00127495JP">
    <Status>
        <State StateDate="2016-06-28 11:37:47" StateMessage="亲,您的包裹已入库完成,祝您海淘愉快!" StateOperator="PH002JP" />
        <State StateDate="2016-06-29 12:32:13" StateMessage="亲,您的包裹已安排极速转运!" StateOperator="PH002JP" />
        <State StateDate="2016-07-02 09:16:58" StateMessage="亲,您的包裹已到达HK分拨中心,等待清关中!" StateOperator="PH005CN" />
        <State StateDate="2016-07-04 09:32:16" StateMessage="亲,您的包裹已清关完毕!" StateOperator="PH006CN" />
    </Status>
</Order>
EOF;
$xml = simplexml_load_string($a);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
$states = $array['Status']['State'];
foreach($states as $state) {
    echo $state['@attributes']['StateMessage'],' 操作员:',$state['@attributes']['StateOperator'],',',$state['@attributes']['StateDate'],PHP_EOL;
}
</code>
Nach dem Login kopieren

输出如下:

<code>亲,您的包裹已入库完成,祝您海淘愉快! 操作员:PH002JP,2016-06-28 11:37:47
亲,您的包裹已安排极速转运! 操作员:PH002JP,2016-06-29 12:32:13
亲,您的包裹已到达HK分拨中心,等待清关中! 操作员:PH005CN,2016-07-02 09:16:58
亲,您的包裹已清关完毕! 操作员:PH006CN,2016-07-04 09:32:16</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage