如何使用SimpleXmlElement
请求类型通过Curl
发送POST
个对象,并重新接收SimpleXmlElement
个对象。
我在本地服务器上创建了两个文件并创建了对象。
网址:
http://someaddress/fileOne.php
http://someaddress/fileTwo.php
从第一个文件输入对象:
$Xml = new SimpleXMLElement( '<?xml version="1.0" encoding="UTF-8"?><SomeXml></SomeXml>' );
$Translation = $Xml->addChild( 'Translation' );
$Translation->addChild( 'Phrase', 'test' );
现在我想通过curl发送这个$Xml
对象并将其解析到其他文件中并发送回来
$Xml = new SimpleXMLElement( '<?xml version="1.0" encoding="UTF-8"?><SomeXml></SomeXml>' );
$Translation = $Xml->addChild( 'Translation' );
$Translation->addChild( 'Phrase', "Got your phrase: $phrase" );
如果您能提供代码示例,我将非常感激。 谢谢大家的帮助。
答案 0 :(得分:2)
您不会发送SimpleXMLElement对象,您将发送XML数据。
从你的发送方面,你会:
$xml = '<?xml version="1.0" encoding="UTF-8"?><SomeXml></SomeXml>';
// assuming you have a previously initialized $curl_handle
curl_setopt( $curl_handle, CURLOPT_POSTFIELDS, $xml);
然后,从您的接收方,您将获得请求并使用SimpleXml解析它。
答案 1 :(得分:1)
唯一可以通过cURL传递的数据类型是string。您可以使用类似下面的函数解析元素(参考:http://www.nicolaskuttler.com/post/php-innerhtml/)
function innerHTML( $contentdiv ) {
$r = '';
$elements = $contentdiv->childNodes;
foreach( $elements as $element ) {
if ( $element->nodeType == XML_TEXT_NODE ) {
$text = $element->nodeValue;
// IIRC the next line was for working around a
// WordPress bug
//$text = str_replace( '<', '<', $text );
$r .= $text;
}
// FIXME we should return comments as well
elseif ( $element->nodeType == XML_COMMENT_NODE ) {
$r .= '';
}
else {
$r .= '<';
$r .= $element->nodeName;
if ( $element->hasAttributes() ) {
$attributes = $element->attributes;
foreach ( $attributes as $attribute )
$r .= " {$attribute->nodeName}='{$attribute->nodeValue}'" ;
}
$r .= '>';
$r .= $this->innerHTML( $element );
$r .= "</{$element->nodeName}>";
}
}
return $r;
}
然后urlencode(innerHTML($ XML))并传递curl。
警告 - 如果您正在使用大型DOM元素,上述功能可能会导致服务器紧张。