我已经阅读了数百个关于此的SO条目,但我无法让它工作。我真的看不出我做错了什么。我肯定在做一些明显愚蠢的事情,但目前我看不到它。
我正在尝试解析 http://api.spreadshirt.net/api/v1/shops/614852/productTypes?locale=de_DE&fullData=false&limit=20&offset=0
这就是我正在做的:
$shopUrl = "http://api.spreadshirt.net/api/v1/shops/614852/productTypes?".
"locale=de_DE&fullData=false&limit=20&offset=0"
$ch = curl_init($shopUrl);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$result = curl_exec($ch);
curl_close($ch);
$products = new SimpleXMLElement($result);
foreach ($products->productType as $product) {
$resources = $product->children('http://www.w3.org/1999/xlink');
$resEntity = array(
'id' => (int)$product->attributes()->id,
'name' => (string)$product->name[0],
'price' => (string)$product->price[0]->vatIncluded[0],
'preview' => $resources
);
echo '<pre>'.print_r($resEntity, true).'</pre>';
}
这输出我
Array
(
[id] => 6
[name] => Männer T-Shirt klassisch
[price] => 9.90
[preview] => SimpleXMLElement Object
(
[@attributes] => Array
(
[href] => http://api.spreadshirt.net/api/v1/shops/614852/productTypes/6
)
)
)
我现在正在尝试访问 HREF 属性,但到目前为止我尝试过的所有内容都像$resources->attributes()->href
或$resources['href']
但 PHP 一直在说Node no longer exists
.
必须在 attributes()
方法中指定命名空间。我想(attributes()
手册中没有详细解释)您必须使用第一个参数指定 xml 命名空间。这可能会从 xlink
命名空间获取 href
属性。否则,您只需从默认的 xml 命名空间中获取属性,即 type
和 mediaType
(或从哪个节点获取属性)。
它应该是这样的工作(未经测试):
$resources = $product->resources[0]; // <resources> node
$resource = $resources->resource[0]; // first <resource> node
$attribs = $resource->attributes('http://www.w3.org/1999/xlink'); // fetch all attributes from the given namespace
var_dump($attribs->href); // or maybe var_dump((string)$attribs->href);