gpt4 book ai didi

php - 更改 php 中的 soap 前缀

转载 作者:可可西里 更新时间:2023-10-31 22:49:43 25 4
gpt4 key购买 nike

我正在将 soap 网络服务从 .net 重写为 php。默认情况下,php 给我的标签如下所示:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Header><ns1:FindAllCategories/></SOAP-ENV:Header><SOAP-ENV:Body><ns1:FindAllCategoriesResponse><ns1:FindAllCategoriesResult><ns1:ArtistCategoryDto>

等...

但我需要这个:

<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><FindAllCategoriesResponse xmlns="http://tempuri.org/"><FindAllCategoriesResult><ArtistCategoryDto>

这类似于这里的问题:PHP AND SOAP. Change envelope 但是我不想像他那样破解它。此外,我正在创建一个将由现有 iphone 应用程序使用的 soap 服务,而不是使用 PHP 来使用 SoapClient 使用 soap 服务。 iphone 应用程序仅解析原始 xml,我现在无法更改 iphone 应用程序。

最佳答案

在重新阅读你想要的内容并搜索 php 文档后,这里是我的解决方案和我所做的几个假设

假设

  • 如果我是对的,您知道 SOAP 前缀本身不是问题(您可以使用任何前缀,只要它是一致的)。
  • 我们需要为这个特定的 Iphone 应用程序创建一个解决方法,该应用程序使用目前您无法修改/升级的 (xml) 解析器

你想要什么?

  1. 您想使用 native API 来更改 SOAP 前缀
  2. 您想捕获 SoapServer 响应,以便在返回之前更改 SOAP 前缀

解决方案

  1. 目前没有本地 SoapServer API 方法来改变 SOAP 前缀
  2. 您可以捕获 SoapServer 响应并通过正则表达式或 xml 解析器处理响应,请参见下面的示例
<?php

// Create you parse function - Regex
function SoapServerRegexParser($input)
{
// $input contains your XML Response
// Do str_replace or preg_replace
$request = preg_replace({do replace});

//return modified output to client
return $request;
}

// OR create you parse function - Regex XML Parser
function SoapServerXMLParser($input)
{
// $input contains your XML Response
// Use any xml parser that you would like
$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$xml->loadXML($input);
//Do replacement have a looke at: DOMNode::replaceChild

//return modified output to client
return $xml->saveXML();
}

// Make php buffer all output
// Send all output to a callBack function

// Replace 'SoapServerRegexParser' with the callback function name of choice
ob_start('SoapServerRegexParser'); //buffer output and set callback function

// Create SoapServer
$server = new SoapServer('wsdlfile.wsdl');
$server->handle(); //Handle incoming request
ob_end_flush(); //Release buffer, but send through callback function first

?>

这应该可以解决问题,我还没有创建正则表达式部分或实际的 xlm 节点替换,但我认为您可以自己做

关于php - 更改 php 中的 soap 前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com