PHP SoapServer - 节点中的属性
Posted
技术标签:
【中文标题】PHP SoapServer - 节点中的属性【英文标题】:PHP SoapServer - attributes in nodes 【发布时间】:2016-09-24 20:53:48 【问题描述】:我已经在其他地方看到过这个问题的回答,但我仍然无法让它发挥作用,所以我需要进一步澄清:
给出的例子是:
$tag['_'] = 'yyy';
$tag['attr'] = 'xxx';
$tagVar = new SoapVar($tag, SOAP_ENC_OBJECT);
生成的 xml 将是:
<tag attr="xxx">yyy</tag>
但是,我得到了
<tag>
<_>yyy</_>
<attr>xxx</attr>
</tag>
那么,是否还需要其他任何东西才能使其按预期工作? SoapServer 类或 WSDL 中的某种配置?
为了让事情更复杂一点,元素是命名空间的,所以实际上我正在寻找一种方法来获取
<ns:tag attr="xxx">yyy</ns:tag>
【问题讨论】:
【参考方案1】:php 肥皂函数太疯狂了,我从来没有发现它有什么问题。我试图通过 SOAP API 将数据连接并更新到 zimbra,并且遇到了很多问题。所以我使用了 SimpleXMLElement & Curl :)
你可以像这样构建你的 XML:
$xml = new SimpleXMLElement('<soap></soap>'); // create your base
$xml = $xml->addChild('tag', str_replace('&', '&', 'yyy')); // see addChild in docs
$xml->attr = 'xxx'; // escaping content rather than addAttribute which does not
echo $xml->asXML(); // which returns : <tag>yyy<attr>xxx</attr></tag>
对于命名空间,addChild中有命名空间参数,但这并没有输出你想要的……
$xml = $xml->addChild('tag', str_replace('&', '&', 'yyy'), 'ns');
$xml->attr = 'xxx';
echo $xml->asXML(); // which returns : <tag>yyy<attr>xxx</attr></tag>
PS : 如果你在浏览器中运行,别忘了htmlspecialchars
echos :)
【讨论】:
是的,addAttribute
确实有帮助。不过,我希望有一些更高级别的解决方案。
你的意思是给一个函数一个数组,让它来做东西?
那么你可以使用 FluidXML 来获得更高的 :) github.com/servo-php/fluidxml
感谢您对该库的引用,它似乎很有用。但是,我已经在使用 SoapServer 负责的自动数组到 xml 转换(包括命名空间)的基本功能。对于需要属性的节点,我正在尝试一些奇怪的 SoapVar 东西......无论如何,+1 和 +bounty 的努力。干杯以上是关于PHP SoapServer - 节点中的属性的主要内容,如果未能解决你的问题,请参考以下文章
SoapServer无法在Zoap软件包上加载生成的wsdl文件
在 Drupal 7 中访问 html.tpl.php 中的节点属性
如何填充复合消息并作为 SoapServer 响应 XML 返回?