Мне нужно сбросить все элементы payment
в объекте, чтобы отображались только те элементы платежа, которые имеют johndoe
в качестве Получателя.
Код работает частично.Он отменяет только первый элемент оплаты.
xpath работает для этого примера, но не для моего реального проекта.Итак, что является альтернативой отмене сброса всех платежных элементов, которые не имеют johndoe
в узле Payee
?
Объект:
$data = '
<root>
<orderArray>
<order>
<Payments>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">a_test_user</Payee>
</Payment>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">johndoe</Payee>
</Payment>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">c_test_user</Payee>
</Payment>
</Payments>
</order>
</orderArray>
<orderArray>
<order>
<Payments>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">d_test_user</Payee>
</Payment>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">johndoe</Payee>
</Payment>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">f_test_user</Payee>
</Payment>
</Payments>
</order>
<order>
<Payments>
<Payment>
<PaymentStatus>failed</PaymentStatus>
<Payee type="User">g_test_user</Payee>
</Payment>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">johndoe</Payee>
</Payment>
<Payment>
<PaymentStatus>Succeeded</PaymentStatus>
<Payee type="User">i_test_user</Payee>
</Payment>
</Payments>
</order>
</orderArray>
</root>
';
Код:
$xml = simplexml_load_string($data);
$sellerID = 'johndoe';
foreach($xml->orderArray as $order) {
foreach($order->order as $val) {
foreach ( $val->Payments->Payment as $payment ) {
if($payment->Payee != $sellerID) {
unset($payment[0]);
}
}
$asxml .= $val->asXML();
}
}
$xml = new DomDocument('1.0', 'utf-8');
$xml->loadXML('<Root>' . $asxml . '</Root>');
header('content-type: text/xml');
echo $xml->saveXML();