所以我正在使用soap服务,当我获取数据并通过simplexml_load_string解析它以便作为对象访问数据(或者只是基本上访问数据)时,simplexml_load_string似乎将其删除。
来自soap服务的Raw响应如下:
通过simplexml_load_string解析的结果 使用以下代码:
$result = simplexml_load_string((string)$result->DisplayCategoriesResult->any);
我得到的结果是:
这看起来是正确的,但仔细看看你会注意到它只是id并且类别的名称留下了behing simplexml_load_string
我怎样才能获得正确的结果?如果有另一种方法可以将原始数据放入"可用的"形式或对象也欢迎解决方案
答案 0 :(得分:1)
使用print_r
或var_dump
等时,XML节点的文本内容不会显示。它们不是“传统”PHP对象,因此您无法使用标准调试选项
要访问文本内容(无论是嵌入为CDATA还是其他内容),您需要逐步进入子元素,然后将它们转换为字符串:
<?php
$xml = <<<XML
<randgo xmlns="">
<status>0</status>
<message>Success</message>
<categories>
<category id="53"><![CDATA[go eat]]></category>
<category id="54"><![CDATA[go do]]></category>
<category id="55"><![CDATA[go out]]></category>
</categories>
</randgo>
XML;
$sxml = simplexml_load_string($xml);
foreach ($sxml->categories->category as $category)
{
echo $category['id'] . ": " . (string) $category, PHP_EOL;
}
=
$ php simplexml_categories.php
53: go eat
54: go do
55: go out
(对不起,如果XML中有任何拼写错误,我想我是从屏幕截图中正确复制的......)
答案 1 :(得分:0)
类别名称为 CDATA 。尝试这样的东西来阅读它。
$doc = new DOMDocument();
$doc->load((string)$result->DisplayCategoriesResult->any);
$categories = $doc->getElementsByTagName("categories");
foreach ($categories as $categorie) {
foreach($categorie->childNodes as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
echo $child->textContent . "<br/>";
}
}
}