2017-08-01 78 views
0

我想只选择指定仓库来更新库存。 I.E.我想只有99,但是每个项目有不同数量的仓库所以下面的代码只能在99仓库工作在第3行:使用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

你真正想要什么?选择'stock'元素的仓库=“99”'? –

+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])') 
);