用xml文件创建php请求

问题描述 投票:-1回答:1

我正在为我的私人项目使用网站服务。

我有一个像这样的xml文件:

<Request Originator="xxxxx" Company="xxx">

    <Range Code="xx">

        <Item Id="xxxxxx-xxxxx-xxxxxx-xxx-7E8B94462F2C" />

    </Range>

    <KeyValues>

        <Translations>

            <Language Value="de" />

            <Language Value="en" />

        </Translations>

        <Regions Show="true" />

        <Towns Show="true" />

    </KeyValues>

</Request>

编辑所以我知道直到今天:是我发送一个请求到这个网址:http://interface.deskline.net/DSI/KeyValue.asmx?WSDL与该服务器我进行通信但总是收到此错误消息:

soap:ReceiverSystem.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1. at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() at System.Xml.XmlTextReaderImpl.ParseDocumentContent() at System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read() at System.Xml.XmlReader.MoveToContent() at System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement() at System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) --- End of inner exception stack trace ---1

我没有得到它的沟通。这里是我写的一些PHP代码:

$url = 'http://interfacetest.deskline.net/DSI/KeyValue.asmx';


$content = 0;
if (file_exists('/mm/request.xml')) {
    $xml = fopen('/mm/request.xml', "r");
    $content =  fread($xml,filesize("/mm/request.xml"));
    fclose($xml);
} else {
    echo 'No file, no request';
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Following line is compulsary to add as it is:
curl_setopt($ch, CURLOPT_POSTFIELDS,
    "xmlRequest=" . $content);
$response = curl_exec($ch);
echo $response;
php xml curl concrete5
1个回答
1
投票

DOMDocument非常适合处理XML文档,例如:

$domd=new DOMDocument();
$domd->formatOutput=true;
$domd->loadXML($str,LIBXML_NOBLANKS);
$rangeele=$domd->getElementsByTagName("Range")->item(0);
for($i=0;$i<5;++$i){
    $tmp=$domd->createElement("Item");
    $tmp->setAttribute("Id",$i);
    $rangeele->appendChild($tmp);
}
var_dump($domd->saveXML());

输出

...
  <Range Code="xx">
    <Item Id="xxxxxx-xxxxx-xxxxxx-xxx-7E8B94462F2C"/>
    <Item Id="0"/>
    <Item Id="1"/>
    <Item Id="2"/>
    <Item Id="3"/>
    <Item Id="4"/>
  </Range>
...

引用how can I set up the communication between my server and theirs with php - 这可能有几种方式,取决于服务器支持的内容。最常见的方法是通过HTTP协议进行通信(顺便提一下,这是与Web浏览器主要用于与stackoverflow.com网站通信的协议),这可以像

$ch=curl_init('http://example.org/api');
curl_setopt_array($ch,array(CURLOPT_POST=>1,CURLOPT_HTTPHEADER=>array('Content-Type: application/xml'),CURLOPT_POSTFIELDS=>$xml));
curl_exec($ch);
curl_close($ch);

另一种流行的方法是使用TCP协议(其中http协议建立在其上),可以这样做

$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($sock,"example.org",1337);
socket_write($socket,$xml);
socket_close($sock);

还有很多其他协议,ofc(and curl supports a great deal of them),但这些是最常见的协议。再次,它真的取决于目标服务器支持什么,我们在SO不知道,问你想要与之沟通的人。

(ps,在上面的例子中,我省略了错误检查。同样,我投票并投票结束,因为你的问题太宽泛,缺乏细节。你甚至没有解释你期望使用什么协议。引用I am trying for 2 hours to get this working but no luck.好,什么你试过吗?它是怎么失败的?)

© www.soinside.com 2019 - 2024. All rights reserved.