2017-08-01 11 views
0

在庫を更新するために指定された倉庫のみを選択します。 I.私は99をしたいが、以下のコードはわずか3行の中に99の倉庫で働くので、すべてのアイテムは倉庫の別の番号を持っている:Simplexmlを使用して項目を選択してください

$quantity_calc = $this_product->stock[2]; 

はここでサンプルXMLです:

<product sku="123546" supplier="BOSCH" price="1.71"> 
<stock warehouse="SAND">2.00</stock> 
<stock warehouse="44">2.00</stock> 
<stock warehouse="55">4.00</stock> 
<stock warehouse="77">2.00</stock> 
<stock warehouse="88">2.00</stock> 
<stock warehouse="97">2.00</stock> 
<stock warehouse="99">2.00</stock> 
<stock warehouse="33">2.00</stock> 
</product> 

としますprint_r($ this_product - >株);

[@attributes] => Array 
     (
      [warehouse] => SAND 
     ) 

    [0] => 2.00 
    [1] => 2.00 
    [2] => 4.00 
    [3] => 2.00 
    [4] => 2.00 
    [5] => 2.00 
    [6] => 2.00 
    [7] => 2.00 
) 
+0

あなたが本当にしたいですか? 'warehouse =" 99 "'の 'stock'要素を選択していますか? –

+0

はい、倉庫 "99"は必ずしも同じ場所にあるとは限りません。 – JoeDoe

答えて

1

DOMの一部をフェッチするには、Xpath式を使用します。 SimpleXMLElement::xpath()はそれへのアクセスを提供します。

$product = new SimpleXMLElement($xml); 
var_dump(
    (string)$product->xpath('//stock[@warehouse=99]')[0] 
); 

DOM拡張自体はそれのためのDOMXPathを使うことの最大のクラスがあります。

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 

var_dump(
    $xpath->evaluate('string(//stock[@warehouse=99])') 
); 
関連する問題