我有一个XML数据集,我通过PHP通过SOAP消费。我试图解析xml中的值,以便我可以使用这些值填充到数据库中。我一直在寻找一段时间来找到最好的方法来做到这一点。以下是一些xml的示例:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<PaymentNotification xmlns="http://apilistener.envoyservices.com">
<payment>
<uniqueReference>ESDEUR11039872</uniqueReference>
<epacsReference>74348dc0-cbf0-df11-b725-001ec9e61285</epacsReference>
<postingDate>2010-11-15T15:19:45</postingDate>
<bankCurrency>EUR</bankCurrency>
<bankAmount>1.00</bankAmount>
<appliedCurrency>EUR</appliedCurrency>
<appliedAmount>1.00</appliedAmount>
<countryCode>ES</countryCode>
<bankInformation>Sean Wood</bankInformation>
<merchantReference>ESDEUR11039872</merchantReference>
</payment>
</PaymentNotification>
</soap:Body>
</soap:Envelope>
使用SimpleXMl和namespaces / xpath,我可以访问标签和其中的值。但是,我似乎能够解析值的唯一方法是遍历节点中的每个元素,检查它的名称,如果它匹配我的字符串比较,则将其分配给数组变量。我必须解析多笔付款。例如:
//all payments
foreach($data->children() as $child) {
//one payment
foreach($child->children() as $subChild) {
switch($subChild->getName()) {
case "bankCurrency":
$newPayment['bankCurrency'] = (string)$subChild;
break;
case "bankPayment":
$newPayment['bankAmount'] = (string)$subChild;
break;
}
}
}
这是最好的方法吗?或者我完全错过了某个地方的其他方式?谢谢!
答案 0 :(得分:0)
经过多次试验和错误,我意识到我可以以更容易的方式实际访问xml元素。在初始循环中,我可以使用$ child-&gt; bankCurrency直接访问元素。无需进入内循环并进行任何解析。我终于绕过这个PHP xml的东西。