无法从simplexml_load_string获取节点

时间:2018-03-05 22:46:09

标签: php xml simplexml-load-string

我理解这个问题已被提出,但我发现的所有解决方案都没有对我有效。

鉴于此:

SimpleXMLElement Object
(
    [0] => 
    <test>
        <blah>
          <x>
          filler
          </x>
        </blah>
    </test>

)

如何获得<x>值?

我已经尝试了

$doc = simplexml_load_string($xml_response);
print_r($doc->test->blah->x);
print_r($doc[0]->test->blah->x);
print_r($doc->{'0'}->test->blah->x);
print_r((string)$doc->{'0'}->test->blah->x);
print_r((string)$doc[0]->test->blah->x);
print_r((string)$doc->test->blah->x);

这是原始的xml:

1.0" encoding="UTF-8" ?>
<xxx>
    &lt;test&gt;
        &lt;blah&gt;
            &lt;x&gt;fillertexthere&lt;/x&gt;
        &lt;/blah&gt;
        &lt;fillertexthere&lt;/Reason&gt;
    &lt;/test&gt;
</xxx>%  

1 个答案:

答案 0 :(得分:0)

您的SimpleXMLElement包含一个字符串。我认为这是因为您的xml包含&lt;&gt;

您可以做的是先使用htmlspecialchars_decode,然后加载字符串。

(我已从您的原始xml中删除了此行&lt;fillertexthere&lt;/Reason&gt;%

$xml_response = <<<DATA
<?xml version="1.0" encoding="UTF-8" ?>
    <xxx>
        &lt;test&gt;
            &lt;blah&gt;
                &lt;x&gt;fillertexthere&lt;/x&gt;
            &lt;/blah&gt;
        &lt;/test&gt;
    </xxx>
DATA;
$xml_response = htmlspecialchars_decode($xml_response);

var_dump($xml_response);

这看起来像是:

object(SimpleXMLElement)#1 (1) {
  ["test"]=>
  object(SimpleXMLElement)#2 (1) {
    ["blah"]=>
    object(SimpleXMLElement)#3 (1) {
      ["x"]=>
      string(14) "fillertexthere"
    }
  }
}

您可以像这样回显x的值:

echo $doc->test->blah->x;