simplexml_load_string正在从soap响应中剥离数据

时间:2016-06-17 14:26:43

标签: php laravel soap simplexml-load-string

所以我正在使用soap服务,当我获取数据并通过simplexml_load_string解析它以便作为对象访问数据(或者只是基本上访问数据)时,simplexml_load_string似乎将其删除。

来自soap服务的Raw响应如下:

enter image description here

通过simplexml_load_string解析的结果 使用以下代码:

    $result = simplexml_load_string((string)$result->DisplayCategoriesResult->any);

我得到的结果是:

enter image description here

这看起来是正确的,但仔细看看你会注意到它只是id并且类别的名称留下了behing simplexml_load_string

我怎样才能获得正确的结果?如果有另一种方法可以将原始数据放入"可用的"形式或对象也欢迎解决方案

2 个答案:

答案 0 :(得分:1)

使用print_rvar_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

请参阅:https://eval.in/590975

(对不起,如果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/>";
        }
    }
}