我有以下 XML(你可以说 SOAP 请求):
<SOAPENV:Envelope xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS="http://xyz.gov/headerschema" >
<SOAPENV:Header>
<NS:myHeader>
<NS:SourceID>223423</NS:SourceID>
</NS:myHeader>
</SOAPENV:Header>
</SOAPENV:Envelope>
我使用以下代码,它工作正常:
<?php
$myRequest ='<SOAPENV:Envelope xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS="http://xyz.gov/headerschema" >
<SOAPENV:Header>
<NS:myHeader>
<NS:SourceID>223423</NS:SourceID>
</NS:myHeader>
</SOAPENV:Header>
</SOAPENV:Envelope>';
$xml = simplexml_load_string($myRequest, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$namespaces = $xml->getNameSpaces(true);
$soapHeader = $xml->children($namespaces['SOAPENV'])->Header;
$myHeader = $soapHeader->children($namespaces['NS'])->myHeader;
echo (string)$myHeader->SourceID;
?>
问题
我知道前缀( SOAPENV + NS ),但客户端可以将前缀更改为他们想要的任何前缀,因此他们可能会向我发送具有( MY-SOAPENV + MY-NS)前缀的 xml 文档。
我的问题
由于命名空间前缀不是静态的,我该如何处理,我该如何解析它?
谢谢