Я получаю большой блок данных 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>"}
Во-первых, кажется, что XML обернут в XML. То есть ваш XML-документ выглядит частично так:
<add value="<?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>">
Поэтому первое, что вам нужно сделать, это получить этот внутренний фрагмент 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;
}
Других решений пока нет …