【发布时间】:2014-06-23 00:46:55
【问题描述】:
如何使用 php 的 Soap 库在 Soap 头中的节点上添加属性?
尝试了所有可用的示例(StackOverflow 和 php.net 上的所有示例(示例、cmets 等)。
$a = ['_'=> 'bar', 'id' => 1, 'val' => 'foo'];
$x = new SoapVar($a,SOAP_ENC_OBJECT);
$h = new SoapHeader('http://www.w3.org/2003/05/soap-envelope','FFS', $x);
这会导致:
<env:FFS>
<_>bar</_>
<id>1</id>
<val>foo</val>
</env:FFS>
附加:属性应该命名空间。在没有属性的情况下将命名空间节点添加到正文和/或标题不是问题。给节点添加属性是个问题。
最后我需要得到的结果节点应该是这样的
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:nsx="http://example.com">
<env:Header>
<node nsx:foo="bar">
<nsx:baz>bam</nsx:baz>
</node>
</env:Header>
<env:Body>
[ snip ]
</env:Body>
</env:Envelope>
注意:由于到目前为止我发现的所有示例/提示都建议手动构建节点或使用 RAW XML,因此我必须强调以下几点:
- 我不想使用 XSD_ANYXML,
- 我不想使用 SimpleXML 和/或 DOMElement 创建节点。
- 我会接受其他 SOAP 库的建议,以便我轻松构建调用。
【问题讨论】:
-
对不起,但我认为这是不可能的。您可能需要为此查看一些 XML 库。
-
是的,通过进一步调查,我还得出结论,内置库无法做到这一点。
标签: php soap attributes namespaces soapheader