Невозможно получить узел из 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 ответ

Решение

Ваш SimpleXMLElement содержит одну строку. Я думаю, это потому, что ваш XML содержит &lt; а также &gt;,

Что вы можете сделать, это сначала использовать htmlspecialchars_decode, а затем загрузить вашу строку.

(Я удалил эту строку &lt;fillertexthere&lt;/Reason&gt; а также % из вашего сырого XML)

$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;
Другие вопросы по тегам