【发布时间】:2019-04-13 15:40:17
【问题描述】:
我需要取消设置对象中的所有payment 元素,以便仅显示以johndoe 作为收款人的支付元素。
代码部分工作。它只取消设置第一个支付元素。
xpath 适用于本示例,但不适用于我的实际项目。那么,除了取消设置 Payee 节点中所有没有 johndoe 的支付元素之外,还有什么替代方法?
对象:
$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();
【问题讨论】:
标签: php foreach simplexml unset