使用 simplexml 按属性选择项目



我只想选择指定的仓库来更新库存。 即我只想要 99,但每件商品都有不同数量的仓库,所以下面的代码仅适用于 99 行的 3 个仓库:

$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_产品->库存(;

[@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
)

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

最新更新