ApTyP_93
@ApTyP_93
Начинающий Web-разработчик

Почему функция simplexml_load_file не извлекает данные из XML-файла?

Всем привет!

Возникла проблема при извлечении данных из файла. Я давно играл в игру одну и мне было интересно, как средством php извлечь данные из файла res.xml с сайта. Пытался и с помощью get извлекать, ещё несколько попыток было, и потом когда ничего не получилось забросил это дело. Сейчас загорелось желание опять попробовать, и я почти у финиша)

Искал информацию по этому поводу, и вычитал, что можно использовать функцию simplexml_load_file(). Пример по извлечению данных мне удалось сделать и разобраться в нём. Из обычного файла данные извлёк, а из файла, который на сервере игры, данные не могу извлечь.

Пример с моего файла res.xml:
<root>
  <s>
    <r name="1111"/>
    <r name="2222"/>
  </s>
  <s>
    <r name="3333"/>
    <r name="4444"/>
  </s>
</root>


Файл index.php:
<?php

$xml = simplexml_load_file('res.xml');

/*
echo '<pre>';
print_r($xml);
*/

$s0_r0 = $xml->s[0]->r[0][name];
$s0_r1 = $xml->s[0]->r[1][name];
$s1_r0 = $xml->s[1]->r[0][name];
$s1_r1 = $xml->s[1]->r[1][name];

echo $s0_r0;
print "<br />";
echo $s0_r1;
print "<br />";
echo $s1_r0;
print "<br />";
echo $s1_r1;

?>


Результат

1111
2222
3333
4444


При обращении к файлу на сервере:
Ошибка

Warning: simplexml_load_file() [function.simplexml-load-file]: https://www.timezero.ru/res.xml:11: parser error : Extra content at the end of the document in C:\OpenServer\domains\bot.artur\index.php on line 3

Warning: simplexml_load_file() [function.simplexml-load-file]: in C:\OpenServer\domains\bot.artur\index.php on line 3

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in C:\OpenServer\domains\bot.artur\index.php on line 3


Результат должен быть такой:
5adcc42ab4fce897361633.jpeg

Что я делаю не так? Заранее спасибо за помощь.
  • Вопрос задан
  • 695 просмотров
Пригласить эксперта
Ответы на вопрос 1
IceRD
@IceRD
все эти элементы должны быть обернуты
Пример работы:
$xml_str = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<script name="game">
	<S time="1389634801" shop="New Moscow Shop" xy="0/-1" city="New Moscow" >
		<R name="Metals" cost="1.75" need="41571" />
		<R name="Gold" cost="1.1" need="437837" />
		<R name="Polymers" cost="1.25" need="301096" />
		<R name="Organic" cost="2.6" need="242875" />
		<R name="Silicon" cost="1.3" need="909964" />
		<R name="Radioactive" cost="2" need="276821" />
		<R name="Gems" cost="1.6" need="489296" />
		<R name="Venom" cost="0.3" need="252830" />
	</S>
	<S time="1389634801" shop="Berezka" xy="-1/-1" city="New Moscow" >
		<R name="Metals" cost="1.8" need="27183" />
		<R name="Gold" cost="1.2" need="14694" />
		<R name="Polymers" cost="1.27" need="15719" />
		<R name="Organic" cost="2.97" need="17164" />
		<R name="Silicon" cost="1.54" need="9195" />
		<R name="Radioactive" cost="2.16" need="17663" />
		<R name="Gems" cost="1.5" need="17054" />
		<R name="Venom" cost="0.37" need="11479" />
	</S>
</script>
XML;

$xml = new SimpleXMLElement($xml_str);
echo '<pre>';
echo 'cost:' . $xml->S[0]->R[0]['cost'] . '<br>';

foreach ($xml->S[0]->R as $state => $k) {
	echo "name:{$k['name']} 
	cost:{$k['cost']} 
	need:{$k['need']} 
	<br>";
}

В вашем случае для загрузки файла используете функцию simplexml_load_file()
файл который пытаетесь взять содержит ошибку в структуре xml файла.

как вариант можно взять данные через curl php.net/manual/ru/book.curl.php
добавить заголовок или разобрать как html simplehtmldom.sourceforge.net
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы