simplexml_load_string() will not read soap response with quot;soap:quot; in the tags(simplexml_load_string() 不会读取带有“soap:的soap响应;在标签中)
问题描述
我知道这可能是一个新手问题,但请逗我笑.当读取标签中带有soap:"的 xml 字符串时,simplexml_load_string() 不会读取到 xml.
I know this may be a newbie question, but please humor me. When reading an xml string with "soap:" in the tags, simplexml_load_string() will not read in the xml.
给定这个脚本:
#!/usr/bin/php
<?php
$s='
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<context xmlns="urn:zimbra"/>
</soap:Header>
<soap:Body>
<AuthResponse xmlns="urn:zimbraAdmin">
<authToken>somevalue</authToken>
<lifetime>123124123</lifetime>
<a n="zimbraIsDomainAdminAccount">false</a>
</AuthResponse>
</soap:Body>
</soap:Envelope>';
print_r(simplexml_load_string($s));
echo "
";
print_r(simplexml_load_string(str_ireplace("soap:", "", $s)));
?>
我得到这个输出:
jesse@jesse-debian:~/code/zmsoap$ ./xmltest.php
SimpleXMLElement Object
(
)
SimpleXMLElement Object
(
[Header] => SimpleXMLElement Object
(
[context] => SimpleXMLElement Object
(
)
)
[Body] => SimpleXMLElement Object
(
[AuthResponse] => SimpleXMLElement Object
(
[authToken] => somevalue
[lifetime] => 123124123
[a] => false
)
)
)
jesse@jesse-debian:~/code/zmsoap$
我只是很好奇为什么会发生这种情况,以及是否有比进行字符串替换更合适的方法来解决该问题.
I'm just curious why this is happening, and if there is a more proper way to remedy the problem as opposed to doing a string replace.
推荐答案
带有冒号 in 的标记名称表示该标记位于非默认命名空间中.SimpleXML 一次只查看一个命名空间,因此您需要使用 ->children()
方法.
A tag name with a colon in indicates the tag is in a non-default namespace. SimpleXML only looks at one namespace at a time, so you need to specifically select the namespace using the ->children()
method.
在这种情况下 $xml->children('http://www.w3.org/2003/05/soap-envelope')->Body
或 $xml->children('soap', true)->Body
应该都可以.
In this case $xml->children('http://www.w3.org/2003/05/soap-envelope')->Body
or $xml->children('soap', true)->Body
should both work.
出于这个和其他原因,不建议使用 print_r
来调试 SimpleXML 对象.试试这个专用功能.
For this and other reasons, it's not advisable to use print_r
to debug SimpleXML objects. Try this dedicated function instead.
这篇关于simplexml_load_string() 不会读取带有“soap:"的soap响应;在标签中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:simplexml_load_string() 不会读取带有“soap:"的so


基础教程推荐
- 将变量从树枝传递给 js 2022-01-01
- 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
- 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
- php中的foreach复选框POST 2021-01-01
- Web 服务器如何处理请求? 2021-01-01
- PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
- php 7.4 在写入变量中的 Twig 问题 2022-01-01
- 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
- Yii2 - 在运行时设置邮件传输参数 2022-01-01
- php中的PDF导出 2022-01-01