尝试使用SimpleXML函数进行解析,效果很好。但是我一直坚持如何从XML中提取“颜色”和“长度”数据
以下是代码中引用的“ ebay-response.xml”文件的片段:
完整的xml文件可以从ebay-response.xml下载
<?xml version="1.0" encoding="UTF-8"?>
<GetItemResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2015-08-03T11:45:56.061Z</Timestamp>
<Ack>Success</Ack>
<Version>927</Version>
<Build>E927_INTL_API_17590342_R1</Build>
<Item>
<Quantity>25000</Quantity>
<ShippingDetails />
<Title>CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft</Title>
<Variations>
<Variation>
<SKU>1176:3448</SKU>
<Quantity>100</Quantity>
<VariationSpecifics>
<NameValueList>
<Name>Colour</Name>
<Value>White</Value>
</NameValueList>
<NameValueList>
<Name>Length</Name>
<Value>4" (10cm)</Value>
</NameValueList>
</VariationSpecifics>
</Variation>
<Variation>
<SKU>1176:3449</SKU>
<Quantity>100</Quantity>
<VariationSpecifics>
<NameValueList>
<Name>Colour</Name>
<Value>White</Value>
</NameValueList>
<NameValueList>
<Name>Length</Name>
<Value>5" (12cm)</Value>
</NameValueList>
</VariationSpecifics>
</Variation>
<Variation>
<SKU>1176:3450</SKU>
<Quantity>100</Quantity>
<VariationSpecifics>
<NameValueList>
<Name>Colour</Name>
<Value>White</Value>
</NameValueList>
<NameValueList>
<Name>Length</Name>
<Value>6" (15cm)</Value>
</NameValueList>
</VariationSpecifics>
</Variation>
<Variation>
<SKU>1176:3451</SKU>
<Quantity>100</Quantity>
<VariationSpecifics>
<NameValueList>
<Name>Colour</Name>
<Value>White</Value>
</NameValueList>
<NameValueList>
<Name>Length</Name>
<Value>7" (18cm)</Value>
</NameValueList>
</VariationSpecifics>
</Variation>
<Variation>
我当前的PHP脚本是:
if(!$resp = simplexml_load_file("ebay-response.xml"))
{
echo "Unable to load XML Stream from eBAY API, possible no response from eBay?<br />\n";
return;
}
if ($resp->Ack != "Success") {
echo 'eBay Response Status was: ' . $resp->Ack . " Unable to parse the XML <br />\n";
return;
}
echo 'eBay Response Status: ' . $resp->Ack . "<br />\n";
echo 'ebay Response Timestamp: ' . $resp->Timestamp . "<br />\n";
echo 'ebay API Version: ' . $resp->Version . "<br />\n";
echo 'ebay API Build: ' . $resp->Build . "<br />\n";
echo 'eBay Item Title: ' . $resp->Item->Title . "<br />\n";
echo 'Total Items (all variations): ' . $resp->Item->Quantity . "<br />\n<br />\n";
foreach( $resp->Item->Variations->children() as $SkuAndQuantity )
{
echo 'Title: ' . $resp->Item->Title . ' SKU: ' . $SkuAndQuantity->SKU .
' Qty: ' . $SkuAndQuantity->Quantity . "<br />\n";
foreach( $resp->Item->Variations->Variation->VariationSpecifics->NameValueList->children() as $options )
{
echo $options .'<br />';
}
}
echo "<br />\n";
运行代码时返回的内容如下所示,您可以看到我似乎只拉回白色(没有长度),即使使用该颜色,我似乎也只能从第一个“ Variation”中获取颜色。元素
eBay Response Status: Success
ebay Response Timestamp: 2015-08-03T11:45:56.061Z
ebay API Version: 927
ebay API Build: E927_INTL_API_17590342_R1
eBay Item Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft
Total Items (all variations): 25000
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3448 Qty: 100
Colour
White
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3449 Qty: 100
Colour
White
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3450 Qty: 100
Colour
White
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3451 Qty: 100
Colour
White
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3452 Qty: 100
Colour
White
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3453 Qty: 100
Colour
White
Title: CLOSED END ZIPS 40 Colours 4 6 8 10 12in (10-30cm) for Skirt Trousers Craft SKU: 1176:3454 Qty: 100
Colour
这部分代码不会通过Variation或NameValueList元素进行迭代:
foreach($resp->Item->Variations->Variation->VariationSpecifics->NameValueList->children() as $options)
{
echo $options .'<br />';
}
它将始终使用内部的第一个Variation元素和第一个NameValueList元素。这会导致您的问题。
您需要将代码更改为以下内容:
foreach($resp->Item->Variations->children() as $Variation)
{
echo 'Title: ' . $resp->Item->Title . ' SKU: ' . $Variation->SKU .' Qty: ' . $Variation->Quantity .'<br />';
foreach($Variation->VariationSpecifics->children() as $NameValueList)
foreach($NameValueList->children() as $option)
echo $option .'<br />';
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句