Php 使用simplexml按属性选择项

Php 使用simplexml按属性选择项,php,xml,attributes,simplexml,Php,Xml,Attributes,Simplexml,我只想选择要更新库存的指定仓库。也就是说,我只想要99个,但每个项目都有不同数量的仓库,因此下面的代码仅适用于3行中的99个仓库: $quantity_calc = $this_product->stock[2]; 下面是示例xml: <product sku="123546" supplier="BOSCH" price="1.71"> <stock warehouse="SAND">2.00</stock> <stock warehouse=

我只想选择要更新库存的指定仓库。也就是说,我只想要99个,但每个项目都有不同数量的仓库,因此下面的代码仅适用于3行中的99个仓库:

$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>

要获取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])')
);

你到底想要什么?选择仓库=99的库存元素?是,但仓库99并不总是在同一个地方。
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

var_dump(
  $xpath->evaluate('string(//stock[@warehouse=99])')
);