2012-10-06 7 views
1

다음 xml에서 데이터를 추출하려고합니다.XPath를 사용하여 xml 데이터 추출

<?xml version="1.0"?> 
<GetMatchingProductResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01"> 
<GetMatchingProductResult ASIN="1908256052" status="Success"> 
    <Product xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd"> 
    <Identifiers> 
     <MarketplaceASIN> 
     <MarketplaceId>A1F83G8C2ARO7P</MarketplaceId> 
     <ASIN>1908256052</ASIN> 
     </MarketplaceASIN> 
    </Identifiers> 
    <AttributeSets> 
     <ns2:ItemAttributes xml:lang="en-GB"> 
     <ns2:Author>Slimming World</ns2:Author> 
     <ns2:Binding>Hardcover</ns2:Binding> 
     <ns2:Format>Illustrated</ns2:Format> 
     <ns2:IsEligibleForTradeIn>true</ns2:IsEligibleForTradeIn> 
     <ns2:Label>Slimming World</ns2:Label> 
     <ns2:Languages> 
      <ns2:Language> 
      <ns2:Name>english</ns2:Name> 
      <ns2:Type>Unknown</ns2:Type> 
      </ns2:Language> 
      <ns2:Language> 
      <ns2:Name>english</ns2:Name> 
      <ns2:Type>Original Language</ns2:Type> 
      </ns2:Language> 
      <ns2:Language> 
      <ns2:Name>english</ns2:Name> 
      <ns2:Type>Published</ns2:Type> 
      </ns2:Language> 
     </ns2:Languages> 
     <ns2:ListPrice> 
      <ns2:Amount>16.99</ns2:Amount> 
      <ns2:CurrencyCode>GBP</ns2:CurrencyCode> 
     </ns2:ListPrice> 
     <ns2:Manufacturer>Slimming World</ns2:Manufacturer> 
     <ns2:NumberOfItems>1</ns2:NumberOfItems> 
     <ns2:NumberOfPages>224</ns2:NumberOfPages> 
     <ns2:PackageDimensions> 
      <ns2:Height Units="inches">0.87</ns2:Height> 
      <ns2:Length Units="inches">9.69</ns2:Length> 
      <ns2:Width Units="inches">7.64</ns2:Width> 
      <ns2:Weight Units="pounds">1.85</ns2:Weight> 
     </ns2:PackageDimensions> 
     <ns2:ProductGroup>Book</ns2:ProductGroup> 
     <ns2:ProductTypeName>ABIS_BOOK</ns2:ProductTypeName> 
     <ns2:PublicationDate>2011-11-20</ns2:PublicationDate> 
     <ns2:Publisher>Slimming World</ns2:Publisher> 
     <ns2:SmallImage> 
      <ns2:URL>http://ecx.images-amazon.com/images/I/61aM-pJlQtL._SL75_.jpg</ns2:URL> 
      <ns2:Height Units="pixels">75</ns2:Height> 
      <ns2:Width Units="pixels">64</ns2:Width> 
     </ns2:SmallImage> 
     <ns2:Studio>Slimming World</ns2:Studio> 
     <ns2:Title>Slimming World Extra Easy All in One</ns2:Title> 
     </ns2:ItemAttributes> 
    </AttributeSets> 
    <Relationships/> 
    <SalesRankings> 
     <SalesRank> 
     <ProductCategoryId>book_display_on_website</ProductCategoryId> 
     <Rank>3304</Rank> 
     </SalesRank> 
     <SalesRank> 
     <ProductCategoryId>271146</ProductCategoryId> 
     <Rank>11</Rank> 
     </SalesRank> 
     <SalesRank> 
     <ProductCategoryId>1039764</ProductCategoryId> 
     <Rank>25</Rank> 
     </SalesRank> 
     <SalesRank> 
     <ProductCategoryId>270704</ProductCategoryId> 
     <Rank>38</Rank> 
     </SalesRank> 
    </SalesRankings> 
    </Product> 
</GetMatchingProductResult> 
<ResponseMetadata> 
    <RequestId>8d4fde2b-d2bb-4c06-800d-68eec2effcf3</RequestId> 
</ResponseMetadata> 
</GetMatchingProductResponse> 

내가 뭘

foreach($xml->xpath('//ns2:ItemAttributes') as $event) { 
    $event->registerXPathNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd'); 
    echo var_export($event->xpath('//ns2:author')); 
} 

아무것도에게 반환 할 수없는 나는 내가 돌아갑니다 다음 함수를 사용하고 내가 데이터를 통해 루프를 시도 할 때 과정은

public function getXML2($url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $response = curl_exec($ch); 

    $xml = simplexml_load_string($response, NULL, NULL, "http://mws.amazonservices.com/schema/Products/2011-10-01"); 
    $xml->registerXPathNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd'); 
    return $xml; 

} 

을 repsonses 잘못된?

답변

2

DOMDocument을 사용해 보셨습니까?

$dom = new DOMDocument; 
$dom->loadXML($xml); 

$xpath = new DOMXPath($dom); 
$xpath->registerNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd'); 

$el = $xpath->query('//ns2:ItemAttributes/ns2:Author'); 
var_dump($el->item(0)->nodeValue); 

//string(14) "Slimming World" 
+0

for 루프 앞에 추가해야합니까? –

+0

NULL이라면 –

+0

기다릴 필요가 없습니다. –

관련 문제