无法从 simplexml_load_string 获取节点

Unable to get node from 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>%  

您的 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;