2016-08-12 5 views
0

PHPでXMLを解析しようとしています。 XMLは、eBayのgetsellerlist APIからの応答であり、そのように構成されていますPHPでebay getsellerlistから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> 
    </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 lengthをチェックすると、0に戻ります。 何らかの理由でタイトルノード(または他のノード)が取得されないため、XML文字列をPHPで解析してノード値を取得する方法がわかりません。

ご質問が不明瞭であるか詳細が不明な場合は、私にお知らせください。訂正します。

+0

電源を入れます。確かに間違いがあります –

+1

あなたのxmlの ' thumbnail1' – Ghost

+0

にあります。ありがとうございました。セミコロンが省略された場合、予想されるエラーが発生するため、エラー報告があります。ラインの終わり。 – TK421

答えて

2

XMLが有効ではありません。

任意のXML入力を解析できません。 org.jdom2.input.JDOMParseException:2行目のエラー:要素タイプ "photodisplay"は、一致する終了タグ ""で終了する必要があります。

そして、それはあなたのXML宣言でコメントを削除するだけ後です:

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

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

Working demoことshoud:エラー報告の

<?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

関連する問題