Невозможно получить узел из 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>
<test>
<blah>
<x>fillertexthere</x>
</blah>
<fillertexthere</Reason>
</test>
</xxx>%
1 ответ
Решение
Ваш SimpleXMLElement содержит одну строку. Я думаю, это потому, что ваш XML содержит <
а также >
,
Что вы можете сделать, это сначала использовать htmlspecialchars_decode, а затем загрузить вашу строку.
(Я удалил эту строку <fillertexthere</Reason>
а также %
из вашего сырого XML)
$xml_response = <<<DATA
<?xml version="1.0" encoding="UTF-8" ?>
<xxx>
<test>
<blah>
<x>fillertexthere</x>
</blah>
</test>
</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;