使用php从ebay getsellerlist解析xml响应

时间:2016-08-12 02:32:00

标签: php xml

我正在尝试用PHP解析XML。 XML是来自ebay getsellerlist api的响应,其结构如下:

<!--?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字符串并获取节点值。

最值得赞赏的是,如果问题含糊不清或缺乏细节,请告诉我,我会更正。

1 个答案:

答案 0 :(得分: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

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