Разбор ArrayOfString из SimpleXML

Я получаю большой блок данных XML из базы данных MySQL и пытаюсь проанализировать соответствующую информацию. Есть ArrayOfString которого я никогда раньше не видел, однако мне нужно извлечь из него значения для использования.

Я пробовал несколько методов, включая SimpleXML __ToString(), кастинг с (string) и так далее, но не повезло. Как я могу правильно преобразовать это в строку, которую я могу взорвать в массив, или просто в массив?

        $game_ids = $machine_xml->add[25]->attributes()->value[0];
var_dump($game_ids);

Результаты:

object(SimpleXMLElement)#2 (1) {
[0]=>
string(331) "<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>7</string>
<string>46</string>
<string>4</string>
<string>60</string>
<string>5</string>
<string>23</string>
<string>50</string>
</ArrayOfString>"}

1

Решение

Во-первых, кажется, что XML обернут в XML. То есть ваш XML-документ выглядит частично так:

<add value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;ArrayOfString xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;  &lt;string&gt;7&lt;/string&gt;  &lt;string&gt;46&lt;/string&gt;  &lt;string&gt;4&lt;/string&gt;  &lt;string&gt;60&lt;/string&gt;  &lt;string&gt;5&lt;/string&gt;  &lt;string&gt;23&lt;/string&gt;  &lt;string&gt;50&lt;/string&gt; &lt;/ArrayOfString&gt;">

Поэтому первое, что вам нужно сделать, это получить этот внутренний фрагмент XML и проанализировать его с помощью SimpleXML:

$game_ids = $machine_xml->add[25]->attributes()->value[0];
$inner_xml = (string)$game_ids;
$inner_sxe = simplexml_load_string($inner_xml);

Теперь у вас есть довольно простой XML-документ: один <ArrayOfString> элемент, содержащий серию <string> элементы. Таким образом, вы можете просто зациклить их с foreach заявление и собрать в массив:

$array = [];
foreach ( $inner_sxe->string as $string_element ) {
$string_value = (string)$string_element;
$array[] = $string_value;
}
0

Другие решения

Других решений пока нет …