Разбор XML-данных из веб-службы в базу данных с использованием переполнения стека

В настоящее время я работаю над проектом, в котором мне нужно извлечь некоторые данные из веб-службы XML о землетрясении и вставить их в базу данных.

Кажется, что мое соединение работает, так как на моей странице localhost отображается «успешно установлено».

Часть, где код извлекает местоположение данных, дата & время, широта, долгота и величина не работают, как должно было отображаться сообщение об успехе или неудаче. Но ничего не отображается для этой части. Данные не находятся в таблице в phpMyAdmin.

Я добавил эхо, чтобы увидеть, читается ли файл до конца, и оно показало сообщение «Файл завершен».

выходное изображение

вывод изображения с помощью var_dump

Вот мой код:

<?php $url="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.quakeml";

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec ($ch);
curl_close($ch);
$xml = simplexml_load_string($data);

$db_user = 'root';
$db_pass = '';
$db_name = 'Earthquake';
$db_host = 'localhost';

$con = mysqli_connect("$db_host", "$db_user", "$db_pass", "$db_name");
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}else{
echo "Connected successfully";
}

//GETTING LOCATION OF EARTHQUAKE
foreach ($xml -> description as $row ){
$location = $row -> text;

$sql = "INSERT INTO tbl_earthquake (Location) VALUES (location)";

if ($con->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $con->error;
}   }

// GETTING DATE AND TIME OF EARTHQUAKE

foreach ($xml -> time as $row){
$datetime = $row -> value;

$sql = "INSERT INTO tbl_earthquake (DateandTime) VALUES ($datetime)";

if ($con->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $con->error;
}
}
//GETTING LATITUDE OF EARTHQUAKE

foreach ($xml -> latitude as $row){
$latitude = $row -> value;

$sql = "INSERT INTO tbl_earthquake (Latitude) VALUES ($latitude)";

if ($con->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $con->error;
}
}
//GETTING LONGITUDE OF EARTHQUAKE

foreach ($xml -> longitude as $row){
$longitude = $row -> value;

$sql = "INSERT INTO tbl_earthquake (Longitude) VALUES ($longitude)";

if ($con->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $con->error;
}
}
//GETTING MAGNITUDE OF EARTHQUAKE

foreach ($xml -> mag as $row){
$magnitude = $row -> value;

$sql = "INSERT INTO tbl_earthquake (Magnitude) VALUES ($magnitude)";

if ($con->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
var_dump($xml->description, $xml->time, $xml->latitude, $xml->longitude, $xml->mag);

echo"file read complete;"?>

-2

Решение

Содержимое XML, которое вы читаете, имеет два промежуточных тега, прежде чем перейти к соответствующим тегам, таким как <description>, Когда вы проверяете XML, вы видите следующие теги:

<q:quakeml xmlns="http://quakeml.org/xmlns/bed/1.2"xmlns:anss="http://anss.org/xmlns/event/0.1"xmlns:catalog="http://anss.org/xmlns/catalog/0.1"xmlns:q="http://quakeml.org/xmlns/quakeml/1.2">
<eventParameters publicID="quakeml:earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.quakeml">
<event catalog:datasource="us"catalog:eventsource="us"catalog:eventid="2000i5mj"publicID="quakeml:earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us2000i5mj.quakeml">
<description>
[...]

Вы должны прочитать это <eventParameters> а также <event> теги также. Проверьте весь код XML из источника и проверьте структуру файла XML (какой тег содержится в каком другом теге). Вам может понадобиться XML-кодировщик / форматировщик для лучшего просмотра (возможно, в вашем браузере есть встроенный), потому что в коде XML в источнике нет разрывов строк, что затрудняет чтение.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector