【问题标题】:Displaying an image from a URL returned by an API从 API 返回的 URL 显示图像
【发布时间】:2013-11-01 07:50:16
【问题描述】:

我正在进行一个 API 调用,它应该返回如下内容,

<?xml version="1.0" encoding="utf-8" ?> 
<Chart:chart xmlns:Chart="http://www.zillow.com/vstatic/3/static/xsd/Chart.xsd">
    <request>
        <zpid>48749425</zpid> 
        <unit-type>percent</unit-type> 
        <width>300</width> 
        <height>150</height> 
    </request>
    <message>
        <text>Request successfully processed</text> 
        <code>0</code> 
    </message>
    <response>
        <url>http://www.zillow.com/app?chartDuration=1year&chartType=partner&height=150&      page=webservice%2FGetChart&service=chart&showPercent=true&width=300&zpid=48749425</url> 
    </response>
</Chart:chart>

我需要的是显示返回 URL 处的图表图像,但我该怎么做呢?!?
谢谢!

【问题讨论】:

    标签: php html xml zillow


    【解决方案1】:

    你可以使用simple_xml:

    $x = simplxml_load_string($xml);
    echo '<img src="' . htmlspecialchars($x->response->url) . '">';
    

    【讨论】:

    • 嗨,格雷格,感谢您的回复。无法让它与 load_string 一起使用,但我删除了 htmlspecialchars() 并更改为 load_file 并且它有效。你能告诉我为什么吗? :) 再次感谢。
    【解决方案2】:

    感谢你们让我走上正确的道路。我不知道为什么我不能让它与 load_string 函数一起工作..?

    这是我用过的,效果很好,你知道为什么吗?

    <?php
    $xml = 'http://www.zillow.com/webservice/GetChart.htm?zws-id=******&unit-type=percent&
    zpid='.$title->zpid.'&width=300&height=150';
    $chart = simplexml_load_file($xml);
    echo '<img src="' .$x->chart->url . '">';
    ?>
    

    【讨论】:

      【解决方案3】:

      给定变量 $xml 中的 XML 数据,您可以解析它并使用 XMLDOM 函数输出一个 &lt;img&gt; 标记:

      $doc = new DOMDocument();
      $doc->loadXML($xml);
      
      
      $nodes = $doc->getElementsByTagName("url");
      if ($nodes->length>0)
      {
          $node=$nodes->item(0);
          $url=htmlentities($node->nodeValue);
      
          echo "<img src=\"$url\">";
      }
      

      你也可以使用XPath

      $doc = new DOMDocument();
      $doc->loadXML($xml);
      $xpath = new DOMXPath($doc);
      
      $nodes = $xpath->evaluate('Chart/response/url');
      if ($nodes->length>0)
      {
          $node=$nodes->item(0);
          $url=htmlentities($node->nodeValue);
      
          echo "<img src=\"$url\">";
      }
      

      还有simplexml也有

      $doc = simplexml_load_string($xml);
      $url = htmlentities($doc->response->url);
      echo "<img src=\"$url\">";
      

      请注意,您发布的 XML 无效 - URL 中的 &amp;amp; 字符应为 &amp;amp;,以便这些 XMLDOM 方法正常工作。但这至少说明了如何“正确”使用 XML

      因此,更简单的方法是使用正则表达式删除 url

      if (preg_match('{<url>(.*?)</url>}', $xml, $matches))
      {
           $url=htmlentities($matches[1]);
           echo "<img src=\"$url\">";
      } 
      

      【讨论】:

      • 非常感谢大家。我发布的 XML 是从他们的 API 示例输出中复制的……显然,我对 XML 是全新的,:) 问题是,你们都在那里使用 $xml,这是否意味着 API 调用?
      猜你喜欢
      • 2019-02-18
      • 2021-09-07
      • 2013-09-14
      • 2018-12-19
      • 1970-01-01
      • 2022-07-05
      • 2020-01-19
      • 2016-05-18
      • 2021-07-16
      相关资源
      最近更新 更多