2016-08-12 75 views
0

我想解析用PHP的XML。 XML是來自eBay getsellerlist API的響應,並且其結構像這樣:從ebay getsellerlist解析XML響應與PHP

<!--?xml version="1.0" encoding="UTF-8"?--> 
<getsellerlistresponse xmlns="urn:ebay:apis:eBLBaseComponents"> 
    <timestamp>2016-08-11T14:17:39.869Z</timestamp> 
    <ack>Success</ack> 
    <version>967</version> 
    <build>E967_CORE_APISELLING_17965876_R1</build> 
     <itemarray> 
      <item> 
       <itemid>itemid1</itemid> 
       <listingdetails> 
        <viewitemurl>itemurl1</viewitemurl> 
       </listingdetails> 
       <primarycategory> 
       <categoryid>categoryid1</categoryid> 
       <categoryname>categoryname1</categoryname> 
      </primarycategory> 
      <title>title1</title> 
      <picturedetails> 
       <galleryurl>url1</galleryurl> 
       <photodisplay>thumbnail1</pictureurl> 
       <pictureurl>picture1</pictureurl> 
      </picturedetails> 
     </item> 
    </itemarray> 
</getsellerlistresponse> 

我的PHP如下:

<? 
    $xml = '<!--?xml version="1.0" encoding="UTF-8"?--><getsellerlistresponse xmlns="urn:ebay:apis:eBLBaseComponents"><timestamp>2016-08-11T14:17:39.869Z</timestamp><ack>Success</ack><version>967</version><build>E967_CORE_APISELLING_17965876_R1</build><itemarray><item><itemid>itemid1</itemid><listingdetails><viewitemurl>itemurl1</viewitemurl></listingdetails><primarycategory><categoryid>categoryid1</categoryid><categoryname>categoryname1</categoryname></primarycategory><title>title1</title><picturedetails><galleryurl>url1</galleryurl><photodisplay>thumbnail1</pictureurl><pictureurl>picture1</pictureurl></picturedetails></item><item><itemid>itemid2</itemid><listingdetails><viewitemurl>itemurl2</viewitemurl></listingdetails><primarycategory><categoryid>categoryid2</categoryid><categoryname>categoryname2</categoryname></primarycategory><title>title1</title><picturedetails><galleryurl>url2</galleryurl><photodisplay>thumbnail2</pictureurl><pictureurl>picture2</pictureurl></picturedetails></item></itemarray></getsellerlistresponse>'; 
    $dom = new DOMDocument(); 
    $dom->loadXML($xml); 
    $title_nodes = $dom->getElementsByTagName('title'); 

    $titles = array(); 

    foreach ($title_nodes as $node) { 
     $titles[] = $node->nodeValue; 
     echo $node->nodeValue; 
    } 
    echo $titles[0]; 
    echo count($titles); 
?> 

當我運行它,我得到一個空白頁,沒有錯誤,沒有。 如果我使用count()檢查$ titles的長度,它會回到零。 由於某些原因,它沒有得到標題節點(或任何其他節點),我無法弄清楚如何使用php解析xml字符串並獲取節點值。

任何幫助最受讚賞,如果問題是模糊或缺乏細節,請讓我知道,我會改正它。

+0

打開錯誤報告。確實存在錯誤 –

+1

它已經在你的xml中顯而易見了' thumbnail1' – Ghost

+0

謝謝你的迴應,我確實有錯誤報告,因爲如果在分析時省略了分號,它會產生預期的錯誤一行的結尾。 – TK421

回答

2

的XML無效:

無法解析任何XML輸入。 org.jdom2.input.JDOMParseException:第2行錯誤:元素類型「photodisplay」必須以匹配結束標記「」結尾。

而這只是刪除評論中的XML聲明:

<!--?xml version="1.0" encoding="UTF-8"?--> 

768,16是

<?xml version="1.0" encoding="UTF-8"?> 

Working demo

<?php 

$xml = '<?xml version="1.0" encoding="UTF-8"?> 
<getsellerlistresponse xmlns="urn:ebay:apis:eBLBaseComponents"> 
    <timestamp>2016-08-11T14:17:39.869Z</timestamp> 
    <ack>Success</ack> 
    <version>967</version> 
    <build>E967_CORE_APISELLING_17965876_R1</build> 
     <itemarray> 
      <item> 
       <itemid>itemid1</itemid> 
       <listingdetails> 
        <viewitemurl>itemurl1</viewitemurl> 
       </listingdetails> 
       <primarycategory> 
       <categoryid>categoryid1</categoryid> 
       <categoryname>categoryname1</categoryname> 
      </primarycategory> 
      <title>title1</title> 
      <picturedetails> 
       <galleryurl>url1</galleryurl> 
       <photodisplay>thumbnail1</photodisplay> 
       <pictureurl>picture1</pictureurl> 
      </picturedetails> 
     </item> 
    </itemarray> 
</getsellerlistresponse>'; 
    $dom = new DOMDocument(); 
    $dom->loadXML($xml); 
    $title_nodes = $dom->getElementsByTagName('title'); 

    $titles = array(); 

    foreach ($title_nodes as $node) { 
     $titles[] = $node->nodeValue; 
     echo $node->nodeValue; 
    } 
    echo $titles[0]; 
    echo count($titles); 
+0

看着這個,謝謝,我會回頭檢查一下 – TK421

+0

我已經糾正了腳本中的XML,它仍然給我一個空白頁。 – TK421

+0

您的腳本有效,謝謝! – TK421