我試圖進入位於下面的SOAP中的<err:Errors>
。SimpleXML訪問元素 - PHP
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<soapenv:Fault>
<faultcode>Client</faultcode>
<faultstring>An exception has been raised as a result of client data.</faultstring>
<detail>
<err:Errors xmlns:err="http://www.ups.com/XMLSchema/XOLTWS/Error/v1.1">
<err:ErrorDetail>
<err:Severity>Hard</err:Severity>
<err:PrimaryErrorCode>
<err:Code>120802</err:Code>
<err:Description>Address Validation Error on ShipTo address</err:Description>
</err:PrimaryErrorCode>
</err:ErrorDetail>
</err:Errors>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
下面是我如何去做,但$ fault_errors->錯誤沒有任何東西。
$nameSpaces = $xml->getNamespaces(true);
$soap = $xml->children($nameSpaces['soapenv']);
$fault_errors = $soap->Body->children($nameSpaces['err']);
if (isset($fault_errors->Errors)) {
$faultCode = (string) $fault_errors->ErrorDetail->PrimaryErrorCode->Code;
}
注意,現在您的代碼依賴於'soapenv'前綴,這是一個非常糟糕的做法! – Evert
即使是soapenv? – Slinky
是的。分析器基本上應該忽略使用的前綴。如果xml名稱空間的前綴在夜間發生變化,那麼xml文檔的語義含義保持不變,並且解析器不應該中斷。儘管如此,命名空間url仍然是穩定的,所以在硬編碼中,而不是前綴。 – Evert