更改php中的肥皂前缀 [英] change soap prefixes in php

查看:68
本文介绍了更改php中的肥皂前缀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将一个肥皂网络服务从.net重写为php.默认情况下,php给我的标签看起来像这样:

i'm rewriting a soap web service from .net to php. by default, php is giving me tags that look like this:

<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和SOAP.换信封,但是我不想像他那样乱搞.另外,我正在创建一个肥皂服务,该肥皂服务将由现有的iPhone应用程序使用,而不是使用PHP来使用SoapClient来使用肥皂服务. iPhone应用程序只是解析原始XML,而我现在无法更改iPhone应用程序.

This is similar to the question here: PHP AND SOAP. Change envelope however i'd like to not hack it the way he did. Also, i am creating a soap service that will be consumed by an existing iphone app, not using PHP to consume a soap service using SoapClient. The iphone app just parses the raw xml and i can't change the iphone app right now.

推荐答案

重新阅读了您想要的内容并搜索了php文档之后,这是我的解决方案和我所做的一些假设

After re-reading what it is you want and searching through the php documentation here is my solution and a couple of assumptions that I made

假设

  • 如果我是对的,您会知道SOAP前缀本身不是问题(只要前缀是一致的,就可以使用任何前缀).
  • 我们需要为此特定的iPhone应用程序创建一种变通办法,该应用程序利用您当前无法修改/升级的(xml)解析器

您想要什么?

  1. 您想使用本机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节点替换,但是我想您可以自己完成

This should do the trick, I haven't created the regex part or the actual xlm node replacement but I figure you can do that yourself

这篇关于更改php中的肥皂前缀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆