【问题标题】:Attempting to parse XML/JSON from an API output尝试从 API 输出解析 XML/JSON
【发布时间】:2016-04-20 21:41:17
【问题描述】:

好的...我正在使用 PHP 5(温和一点,还在学习 PHP)。卷曲已启用。尝试将 API 中的 XML 或 JSON 输出加载到对象,但没有任何反应。当我手动执行有问题的 URL 时,我得到了我所期望的。

这是我的代码:

class XmlToJson {
    public function Parse ($url) {
        $fileContents = file_get_contents($url);
        $fileContents = str_replace(array("\n", "\r", "\t"), '', $fileContents);
        $fileContents = trim(str_replace('"', "'", $fileContents));
        $simpleXml = simplexml_load_string($fileContents);
        $json = json_encode($simpleXml);
        return $json;
    }
}

$_MySQLServer = "localhost";
$_MySQLServerUserName = "";
$_MySQLServerPassword = "";
$_MySQLDatabaseName = "";

$_SSActiveWear_UserID = "*****";
$_SSActiveWear_APIKey = "*****";
$_SSActiveWear_APIBaseURL = "https://*****/v2";
$_CategoryURL = "/categories/";
$_StylesURL = "/styles/";
$_ProductsURL = "/products/";
$_SpecsURL = "/specs/";
$_SSActiveWear_MediaType = "xml";

//$_conn = mysqli_connect($_MySQLServer, $_MySQLServerUserName, $_MySQLServerPassword, $_MySQLDatabaseName);

//Insert or Update Categories
$_URL = $_SSActiveWear_APIBaseURL . $_CategoryURL;
$_URL = $_URL . "?mediatype=$_SSActiveWear_MediaType&UserName=$_SSActiveWear_UserID&Password=$_SSActiveWear_APIKey";

$OBJ = simplexml_load_string($_URL);

print_r($OBJ);

我做错了什么?

编辑 1

添加以下代码:

$xml = simplexml_load_file($_URL) or die("Error: Cannot create object");
print_r($xml);

然后它就死了。这是否意味着代码有问题?

【问题讨论】:

  • 你能在运行时在机器上运行 fiddler 来验证你的呼叫是否正在发出并将数据返回到你的 php 吗?如果发生这种情况,那么您的代码是错误的。如果调用有错误,那么您可以在底部的提琴手响应屏幕中看到它们。见telerik.com/fiddler
  • 没有错误。事实上,结果是一个帖子上的 http-200,所以我不知道为什么它不起作用:(。

标签: php json xml


【解决方案1】:

试试这个:

$OBJ = simplexml_load_string(file_get_contents($_URL));

如果您想知道为什么您的代码不工作,您正在尝试从 URL 加载 XML,但“simplexml_load_string”从字符串加载 XML。

【讨论】:

  • 没有骰子。还是空的。
  • 您确定 API 返回 XML 输出吗?
  • 绝对是,我自己手动尝试了 URL。它还返回 JSON。
  • 如果没有,你可以试试 $OBJ = json_decode( file_get_contents( $_URL ) );
  • 也试过了,没有骰子 - 仍然:(
【解决方案2】:

我终于想通了……更重要的是,我终于在 Google 上找到了一个有帮助的网站。这是fsockopen with http authentication problem中的第一个答案。

下面是有效的代码:

file_get_contents("https://$_SSActiveWear_UserID:$_SSActiveWear_APIKey@$_SSActiveWear_APIBaseURL$_CategoryURL/?mediatype=$_SSActiveWear_MediaType");

mediatype 可以是 json 或 xml

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 2019-06-22
    • 2017-01-22
    • 2021-12-28
    • 1970-01-01
    • 2020-12-11
    • 2011-02-16
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多