2017-10-09 12 views
0

XMLシートでデータを検索しようとしています。製品と製品のネームスペースが私のxpathを破損しています

私は、XMLからデータを取得することができれば、次のように削除名前空間:

$nodes = $data->xpath('//Products/Product/productId[.='.$sku.']/parent::*'); 

しかし、私は本当のXMLを読み込む際に製品の名前空間と名前空間のために下図のように、それがフォーマットされ製品

のxml:私のXPathはもはや機能していない名前空間を持つだから今

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Products xmlns="http://config.services.bol.com/schemas/product-feed-1.1.xsd"> 
<Product xmlns="http://config.services.bol.com/schemas/product-1.1.xsd"><productId>9200000082000054</productId><ean>8719659945854</ean><title>SULADA Glossy TPU Bescherm Telefoon Hoesje Samsung Galaxy S8 - Rood</title><productUrlNL>https://www.bol.com/nl/p/sulada-glossy-tpu-bescherm-telefoon-hoesje-samsung-galaxy-s8-rood/9200000082000054/</productUrlNL><productUrlBE>https://www.bol.com/be/p/sulada-glossy-tpu-bescherm-telefoon-hoesje-samsung-galaxy-s8-rood/9200000082000054/</productUrlBE><imageUrl>https://s.s-bol.com/imgbase0/imagebase3/large/FC/4/5/0/0/9200000082000054.jpg</imageUrl><mpn>SS800003374</mpn><brand>GEEN</brand><familyName>SULADA Glossy TPU Bescherm Telefoon Hoesje Samsung Galaxy S8 - Rood</familyName><OfferNL><sellingPrice>14.95</sellingPrice><shippingCost>0.00</shippingCost><condition>new</condition><isDeliverable>true</isDeliverable><ultimateOrderTime>23:59:00.000+02:00</ultimateOrderTime><maximalDeliveryDay>12</maximalDeliveryDay><sellerType>P</sellerType></OfferNL><OfferBE><sellingPrice>14.95</sellingPrice><shippingCost>0.00</shippingCost><condition>new</condition><isDeliverable>true</isDeliverable><ultimateOrderTime>23:59:00.000+02:00</ultimateOrderTime><maximalDeliveryDay>12</maximalDeliveryDay><sellerType>P</sellerType></OfferBE><Gpc><segmentName>Communications</segmentName><familyName>Communications</familyName><className>Communicatieaccessoires</className><brickName>Hoesjes voor Mobiele Telefoon</brickName><chunkName>Hoesje voor mobiele telefoon</chunkName></Gpc><Category><unit>Electronics</unit><category>Mobile &amp; Tablets</category><productgroup>Phones Acc</productgroup><productsubgroup>Accessories Mobile</productsubgroup><subsubgroup>Accessories Mobile</subsubgroup></Category><description>&lt;lt/&gt;b&lt;gt/&gt;Let op! Dit hoesje past alleen op de Samsung Galaxy S8 (dus niet op de Samsung Galaxy S8+ en andere toestellen!&lt;lt/&gt;/b&lt;gt/&gt; Bescherm uw Samsung Galaxy S8 met dit geweldige telefoonhoesje. Dit hoesje is precies op maat gemaakt voor de Samsung Galaxy S8 waardoor het mooi aansluit. Het materiaal waaruit dit hoesje is vervaardigd is van zeer hoge kwaliteit. Met de aanschaf van dit duurzame telefoonhoesje zal uw smartphone gegarandeerd langer meegaan.</description><Properties><Property><key>AppearanceName</key><value>Physical</value></Property><Property><key>Colour</key><value>Meerkleurig</value></Property><Property><key>DeliveryMethod</key><value>Parcel</value></Property><Property><key>Material</key><value>Polycarbonaat</value></Property></Properties></Product> 
<Product xmlns="http://config.services.bol.com/schemas/product-1.1.xsd"><productId>9200000074000054</productId><ean>7101125954841</ean><title>Adapter Samsung Galaxy J710 - J7 2016 Origineel</title><productUrlNL>https://www.bol.com/nl/p/adapter-samsung-galaxy-j710-j7-2016-origineel/9200000074000054/</productUrlNL><productUrlBE>https://www.bol.com/be/p/adapter-samsung-galaxy-j710-j7-2016-origineel/9200000074000054/</productUrlBE><imageUrl>https://s.s-bol.com/imgbase0/imagebase3/large/FC/4/5/0/0/9200000074000054.jpg</imageUrl><brand>Merkloos</brand><OfferNL><sellingPrice>12.95</sellingPrice><shippingCost>0.00</shippingCost><condition>new</condition><isDeliverable>true</isDeliverable><ultimateOrderTime>18:00:00.000+02:00</ultimateOrderTime><maximalDeliveryDay>1</maximalDeliveryDay><sellerType>P</sellerType></OfferNL><Gpc><segmentName>Electrical Supplies</segmentName><familyName>Electrical Connection/Distribution</familyName><className>Batterijen en opladers</className><brickName>Opladers</brickName><chunkName>Oplader voor mobiele telefoon</chunkName></Gpc><Category><unit>Electronics</unit><category>Mobile &amp; Tablets</category><productgroup>Phones Acc</productgroup><productsubgroup>Accessories Mobile</productsubgroup><subsubgroup>Accessories Mobile</subsubgroup></Category><description>Productomschrijving Adapter Samsung Galaxy J710 - J7 2016 Origineel Heeft u behoefte aan een reserveoplader of kunt u uw huidige Samsung oplader niet meer vinden? Dan biedt deze 100% kwalitatieve Samsung oplader uitkomst! Haal ?m vandaag nog in huis! De Samsung adapter bevat tal van voordelen. Zo is de adapter voorzien van een EU Plug en zorgen de minimale afmetingen ervoor dat deze Samsung adapter ideaal is om bij u te dragen. Schaf nu een originele Samsung adapter met de juiste datakabel aan en ben verzekerd van een optimale oplaadkwaliteit dankzij de capaciteit van 2 Ampère. Kenmerken originele Samsung adapter Deze adapter wordt geleverd zonder datakabel en heeft de volgende specificaties:Merk: Samsung Capaciteit: 2 Ampère Type: ETA-U90EWEG Contact: EU PlugAansluiting: USB 2.0</description><Properties><Property><key>AppearanceName</key><value>Physical</value></Property><Property><key>DeliveryMethod</key><value>Parcel</value></Property></Properties></Product></Products> 

。私は(私が見つけたいくつかのサンプルコードを使用して)名前空間を登録し、これに私のXPath関数を変更しようとしました:

PHP:

function findit($sku,$xml){ 
$xml->registerNamespace('prodfeed', 'http://config.services.bol.com/schemas/product-feed-1.1.xsd'); 
$xml->registerNamespace('prod', 'http://config.services.bol.com/schemas/product-1.1.xsd'); 

$nodes = $xml->xpath('/prodfeed:Products/prodfeed:Product/prod:productId[.='.$sku.']/parent::*'); 

var_dump($nodes); 

}

しかし、それは、これまで働いていません。私はここに正しい方向に進んでいますか?

しかし

答えて

1

を、それが製品の要素になった場合、XML文書はそう、この時に、デフォルトの名前空間を変更しますProdfeedではなくprod名前空間の使用を開始する必要があります。

「[」をproductIdの前に戻すことでクエリを簡素化することもできます。つまり、親:: *ビットを使用する必要はありません。

$nodes = $xml->xpath('/prodfeed:Products/prod:Product[prod:productId=' . $sku . ']'); 
1

あなたは2つの名前空間prodfeedprodを登録しているが、あなたのXPathであなただけの 'prodfeed' を使用しています。

あなたは、この行を変更することができた場合多分それが役立つだろう。これまで

$nodes = $xml->xpath('/prodfeed:Products/prodfeed:Product/prod:productId[.='.$sku.']/parent::*'); 

$nodes = $xml->xpath('/prodfeed:Products/prod:Product/prod:productId[.=' . $sku . ']/parent::*'); 
関連する問題