Разобрать XML-файл в массив

  • Автор темы Дмитрий К1
  • 29
  • Обновлено
  • 17, May 2024
  • #1
У меня проблема с анализом внешних XML-файлов в массив PHP. Структура XML-файла такая:
 
$xmlstring = file_get_contents("xmlfile.php?ID=someId");
$xml = new simpleXml2Array( $xmlstring, null );
$xmlarray = $xml->arr[g][0][content][text];

$values = array();
for( $i= 0 ; $i < count($xmlarray) ; $i++ ) {

$values[] = $xmlarray[$i][content];
}

print_r( $values );
Код (разметка): я пытаюсь получить массив "текст"элементы типа:
  Array ( [0] => text content [1] => text content [2] => text content [3] => text content ) 
PHP: Я пробовал несколько разных способов, но по какой-то причине у меня возникла проблема с доступом к нужным элементам. Единственное рабочее решение, которое я нашел, было:
  <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "[URL='https://lumtu.com/yti/dAZZAdGRodHRwOi8vdzMub3JnL1RSL1NWRy9EVEQvc3ZnMTAuTMn']http://www.w3.org/TR/SVG/DTD/svg10.dtd[/URL]"> <svg style="shape-rendering:geometricPrecision;" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="[URL='https://lumtu.com/yti/dwccwdmdodHRwOi8vdzMub3JnLzIwMDAvDMw']http://www.w3.org/2000/svg[/URL]" preserveAspectRatio="xMidYMid meet" viewBox="0 0 530 900" x="0px" y="0px" width="530px" height="900px"> <g font-family="'sans-serif"> <text x="0" y="76" font-size="14">text content</text> <text x="0" y="76" font-size="14">text content</text> <text x="0" y="76" font-size="14">text content</text> <text x="0" y="76" font-size="14">text content</text> <rect width="530" height="900" x="0" y="0" fill="white" fill-opacity="0" /></g></svg> 
Код (разметка): он использует "простойXml2Array", но я бы хотел избежать этого и получить значения, которые хочу использовать для каждого петля. Я ищу самое простое и легкое решение.

Дмитрий К1


Рег
29 Sep, 2012

Тем
1

Постов
2

Баллов
12
  • 03, Jun 2024
  • #2
@hdewantara прав, domdocument НАМНОГО лучше подходит для этого.

Я даже никогда не видел этой ерунды с simplexml2array — выглядит не очень хорошо. Таким образом, у вас будет DOM, поэтому используйте его:
 $doc = new DOMDocument();
$doc->load('xmlfile.php?ID=someId');
$textElements = $doc->getElementsByTagName('text');
$values = [];
foreach ($textElements as $text) $values[] = $text->textContent;
echo '<pre>', print_r($values), '</pre>';


Код (разметка): Хотя в зависимости от того, что вы хотите сделать с этими текстами, я могу или не могу скопировать их в этот массив, поскольку, ну... nodeList, возвращаемый getElementsByTagName, является проходимым, поэтому...

По сути, если у вас есть dom-документ, вы можете получить доступ к его DOM так же, как вы это делали в JavaScript.
 

Welcome


Рег
17 Sep, 2013

Тем
0

Постов
3

Баллов
3
Тем
49554
Комментарии
57426
Опыт
552966

Интересно