我担心如何使用命名空间和前缀解析此XML。这是我从Curl请求获得的SOAP回复:
<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:body>
<getproductpricekonfigurationresponse xmlns="https://service.printapi.de/interface/">
<getproductpricekonfigurationresult>
<xs:schema id="ProduktPreisKonfiguration" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"></xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<produktpreiskonfiguration xmlns>
<produktkonfiguration diffgr:id="ProduktKonfiguration1" msdata:roworder="0" diffgr:haschanges="inserted">
<idobjekt>4</idobjekt>
<idformat>30</idformat>
<ustidentnr>
<objektpreisnetto>18.77</objektpreisnetto>
<mwstwert>6.01</mwstwert>
</ustidentnr>
</produktkonfiguration>
</produktpreiskonfiguration>
</diffgr:diffgram>
</getproductpricekonfigurationresult>
</getproductpricekonfigurationresponse>
</soap:body>
</soap:envelope>
如果我想回应一下#34; objektpreisnetto&#34;节点,我该怎么做?
编辑:这是我尝试过的一些事情(其中包括):
$xml = simplexml_load_string($soap);
$result = $xml->children('http://schemas.xmlsoap.org/soap/envelope/')
->children('https://service.printapi.de/interface/')
->getproductpricekonfigurationresult
->objektpreisnetto;
echo $result->objektpreisnetto;
没有任何回报,但我确定我没有正确处理儿童部分。
这是我尝试的一个更基本的例子,它也没有返回任何内容:
$xml = simplexml_load_string($soap);
foreach ($xml->children('http://schemas.xmlsoap.org/soap/envelope/') as $child)
{
echo "Child node: " . $child . "<br>";
}
这至少不会返回一个子节点吗?任何见解将不胜感激!
答案 0 :(得分:1)
SoapClient通过在SoapClient选项中设置login
和password
来处理HTTP身份验证,您尝试过吗?
然后使用Wsdl到php生成器来帮助您获得您将用作类图的相应PHP类,尝试https://www.wsdltophp.com。
因此,您只处理PHP对象,而您不必解析任何内容。
答案 1 :(得分:1)
我设法让这个工作!
首先,我使用curl登录并发送SOAP请求,如本答案中所述:https://stackoverflow.com/a/7157785/1121877
然后我按照此处概述的simplexml_load_string加载返回的XML:https://stackoverflow.com/a/8275835/1121877
感谢大家分享他们的知识!