2015-09-08 3 views
-1

Как я могу найти значение <TotalNew> в приведенном ниже примере файла? Я не знаком с simplexml. Я попытался получить к нему доступ: ItemLookupResponse->Items->Item->TotalNew, но это не дало результата.PHP SimpleXML Как получить это значение?

Любой, кто может указать мне, как этого достичь? Заранее спасибо

<?xml version="1.0"?> 
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"> 
<OperationRequest> 
<HTTPHeaders> 
    <Header Name="UserAgent" Value="ApaiIO [2.0.0-DEV]"/> 
</HTTPHeaders> 
<RequestId>3ba918b6-7a00-4251-b24d-be8a40cb3eb8</RequestId> 
<Arguments> 
    <Argument Name="AWSAccessKeyId" Value=""/> 
    <Argument Name="AssociateTag" Value=""/> 
    <Argument Name="Condition" Value="New"/> 
    <Argument Name="ItemId" Value=""/> 
    <Argument Name="Operation" Value="ItemLookup"/> 
    <Argument Name="ResponseGroup" Value="OfferSummary"/> 
    <Argument Name="Service" Value="AWSECommerceService"/> 
    <Argument Name="Timestamp" Value="2015-09-08T07:39:02Z"/> 
    <Argument Name="Version" Value="2011-08-01"/> 
    <Argument Name="Signature" Value="eglWsk68VxzDOE8PIdQdNget9RhZvPiBZylxpgn94ns="/> 
</Arguments> 
<RequestProcessingTime>0.0138980000000000</RequestProcessingTime> 
</OperationRequest> 
<Items> 
<Request> 
    <IsValid>True</IsValid> 
    <ItemLookupRequest> 
    <Condition>New</Condition> 
    <IdType>ASIN</IdType> 
    <ItemId></ItemId> 
    <ResponseGroup>OfferSummary</ResponseGroup> 
    <VariationPage>All</VariationPage> 
    </ItemLookupRequest> 
</Request> 
<Item> 
    <ASIN></ASIN> 
    <ParentASIN></ParentASIN> 
    <OfferSummary> 
    <LowestNewPrice> 
     <Amount>699</Amount> 
     <CurrencyCode>USD</CurrencyCode> 
     <FormattedPrice>$6.99</FormattedPrice> 
    </LowestNewPrice> 
    <LowestUsedPrice> 
     <Amount>599</Amount> 
     <CurrencyCode>USD</CurrencyCode> 
     <FormattedPrice>$5.99</FormattedPrice> 
    </LowestUsedPrice> 
    <TotalNew>3</TotalNew> 
    <TotalUsed>1</TotalUsed> 
    <TotalCollectible>0</TotalCollectible> 
    <TotalRefurbished>0</TotalRefurbished> 
    </OfferSummary> 
</Item> 

+0

Скорее всего вы курировал * OfferSummary * от вас принятия данного ответа, но вы могли бы легче жить с взглянуть в XPath для запроса элементов, которые вы ищете, как это более гибкая : https://secure.php.net/manual/en/simplexml.examples-basic.php#example-6023 – hakre

ответ

0

Ваш XML имеет ошибку. Добавьте следующие строки в конец вашего XML ..

</Items> 
</ItemLookupResponse> 

Затем вы можете использовать следующий .. ..bearing в виду, что может быть несколько <item> элементов внутри <items>, так что вам придется перебрать их.

$xml = simplexml_load_string($string); 

foreach ($xml->Items as $item){ 

    echo $item->Item->OfferSummary->TotalNew->__toString(); 

} 

Если вы можете гарантировать, что там будет только когда-либо один <Item> внутри <Items>, или вы просто хотите предназначаться первый <Item>, вы могли бы добиться этого без цикла, с прицелом на первое значение <Items> массива с помощью Item[0].

echo $xml->Items->Item[0]->OfferSummary->TotalNew->__toString(); 
+0

Спасибо, что сделал. Спасибо за указание на ошибку в xml, а также – datether

+0

С помощью 'echo' вам не нужно явно использовать метод' -> __ toString() 'в контексте строки, он будет автоматически преобразован в строку (то есть для чего магический метод для). И 'Items-> Item-> OfferSummary' всегда будут относиться к первому« Элементу »- есть ли он или есть несколько. Только в том случае, если его нет, '-> OfferSummary' будет' null', но в противном случае он будет представлять собой первый дочерний элемент OfferSummary первого элемента Item элемента элемента Item (Item сначала) элемент (см., вы использовали это уже для * Items *). Просто говорю. – hakre

Смежные вопросы