0 レビュー
1 回答
xml-phpのSimpleXMLで自動的に適用された名前空間を削除します
SimpleXMLを使用してPayPalエクスプレスチェックアウトのSOAPリクエストを作成しようとしています。しかし、私はまだ理解していない行動を経験しています。
エンベロープとそのヘッダーは次のように生成されます:
$envelope = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:ebay:apis:eBLBaseComponents"
xmlns:ns2="urn:ebay:api:PayPalAPI"
/>
');
$header = $envelope->addChild('SOAP-ENV:Header');
$requesterCredentials = $header->addChild('ns2:RequesterCredentials');
$credentials = $requesterCredentials->addChild('ns1:Credentials');
$credentials->addChild('ns1:Username', 'foo');
$credentials->addChild('ns1:Password', 'bar');
次の出力が得られます:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:ebay:apis:eBLBaseComponents"
xmlns:ns2="urn:ebay:api:PayPalAPI">
<SOAP-ENV:Header>
<SOAP-ENV:RequesterCredentials>
<SOAP-ENV:Credentials>
<SOAP-ENV:Username>foo</SOAP-ENV:Username>
<SOAP-ENV:Password>bar</SOAP-ENV:Password>
</SOAP-ENV:Credentials>
</SOAP-ENV:RequesterCredentials>
</SOAP-ENV:Header>
</SOAP-ENV:Envelope>
すべてのノードのプレフィックスがSOAP-ENV
になりましたが、これは私が望むものではありません。ルートノードとヘッダーの前にSOAP-ENV
を付ける必要があり、他のタグには、定義された名前空間を addChild()
の前に付ける必要があります。
必要な出力は次のとおりです。
<?xml version = "1.0" encoding = "UTF-8"?>
foo
バー
ここで何が間違っているのですか?
わからない
0
レビュー
答え :
解決策:
addChild
は、名前空間を3番目のパラメーターとして使用します:
$ requesterCredentials = $ header-> addChild('RequesterCredentials'、null、'urn:ebay:api:PayPalAPI');
$ credentials = $ requesterCredentials-> addChild('Credentials'、null、'urn:ebay:apis:eBLBaseComponents');
$ credentials-> addChild('Username'、'foo'、'urn:ebay:apis:eBLBaseComponents');
$ credentials-> addChild('Password'、'bar'、'urn:ebay:apis:eBLBaseComponents');
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。