次の 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 ドキュメントを送信する可能性があります。
私の質問
名前空間プレフィックスは静的ではないため、これをどのように処理できますか?どうすれば解析できますか?
ありがとう