php - 使用命名空间 PHP 从 SOAP 输出中获取数据
问题描述
我正在尝试从 SOAP 输出下方提取“Auv7cbb9Opa8/lbjVYLqVV03ELE=" 值。但它返回一个空数组。你能帮我解决这个问题吗?
$gotContent ='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:signOnResponse xmlns:ns2="http://www.vx.com/omi">
<sessionHandle>
<ns1:handle xmlns:ns1="http://www.vx.com/schemas/OMItypes.xsd">Auv7cbb9Opa8/lbjVYLqVV03ELE=</ns1:handle>
</sessionHandle>
<result>
<ns1:resultId xmlns:ns1="http://www.vx.com/schemas/OMItypes.xsd">admin</ns1:resultId>
<ns1:resultCode xmlns:ns1="http://www.vx.com/schemas/OMItypes.xsd">0</ns1:resultCode>
<ns1:resultText xmlns:ns1="http://www.vx.com/schemas/OMItypes.xsd">Success</ns1:resultText>
</result>
</ns2:signOnResponse>
</soapenv:Body>
</soapenv:Envelope>';
$xml = simplexml_load_string($gotContent);
$xml->registerXPathNamespace('ns2', 'http://www.vx.com/omi');
$session2=$xml->xpath('//sessionHandle');
print_r($session2) ;
解决方案
你得到了元素,但print_r()
在从 s 中获取任何有用的东西方面非常糟糕SimpleXMLElement
。但这也是您所追求的水平之上。所以添加ns1
命名空间(无论如何你都不会使用ns2
)并将它和添加handle
到 XPath 表达式中以获取数据
$xml->registerXPathNamespace('ns1', 'http://www.vx.com/schemas/OMItypes.xsd');
$session2=$xml->xpath('//sessionHandle/ns1:handle')[0];
print_r((string)$session2) ;
推荐阅读
- python - 硒无头与非无头
- javascript - 动态添加元素
- php - Livewire wire:model.defer 在提交时显示空值(第二次)
- python - 区分两个或多个键盘
- html - 如何使用 CSS 而不是 HTML 表示标签来设置元素的样式?
- node.js - 为什么firebase中的'currentUser'和'onAuthStateChanged'总是为空?
- excel - 如何根据下拉列表在单元格上设置值?
- javascript - 将对象字符串转换为javascript中的对象列表
- javascript - 传递道具时切换和构造函数组件(React)更改源
- r - R - 子集()中的逻辑运算符是一个字符串