2016-08-12 74 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