PHP SimpleXML解析问题,获取重复的元素

MT01

尝试使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章