CSV Filter Column & Rows и echo as XML - - У меня есть рабочий код для echo HTML Таблица - PullRequest
0 голосов
/ 20 февраля 2020

Я нашел много потоков для вывода CSV-файла как XML, но не могу понять, как фильтровать строки и столбцы.

Приведенный ниже код выполняет именно то, что я хочу, но вывод - HTML Таблица.

Мне нужна помощь для создания аналогичного кода для xml вывода.

Сценарий sitemap.csv

1,https://example.com/page1,monthly,1
7,https://example.com/page2,monthly,0.5
14,https://example.com/page3,monthly,0.5
21,https://example.com/page4,monthly,0.5

Это состояние c веб-сайт, на котором все страницы уже созданы, но должны отображаться только в карте сайта со скоростью 1 в неделю ie через 10 дней после 09 февраля 2020 г. $ launchdate только первые две строки должны быть видны в карте сайта.

1-й столбец должен not be echoed - он используется для определения необходимости отображения этой строки во время загрузки.

Я просмотрел множество сценариев для преобразования csv в XML, но все они отображают все столбцы. Я часами пытался придумать решение для создания результатов в формате XML.

Я знаю, что окончательное решение должно будет включать что-то вроде:

header("Content-Type: application/xml; charset=utf-8"); 
    echo '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL; 
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">' .PHP_EOL; 

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

Я знаю, что окончательное решение должно заменить дескрипторы столбцов

eg Loc will become <loc> URL </loc>  then <lastmod> <changefreq>  <priority>

======

Working code to echo HTML table
<?php
//Sources for this solution
// https://thisinterestsme.com/reading-csv-file-with-php/
// and &  https://stackoverflow.com/questions/40285479/filtering-and-displaying-a-csv-file-with-php 

// Final solution should be xml not HTML table

$date = date("Y-m-d");  // Todays Date
$date_number = strtotime($date); // Todays date as Integer
$launchdate_number = strtotime('2020-02-09'); //Launch Date as Integer 1581206400
$days_since_launch = ($date_number - $launchdate_number) / 86400; // Days since Launch date

// Echo data for testing, will not be in the final XML file
echo "date ";
echo $date;
echo " ";
echo "date_number ";
echo $date_number;
echo " ";
echo "launchdate ";
echo $launchdate_number;
echo " ";
echo "days_since_launch ";
echo " ";
echo $days_since_launch;
echo "<br>";
$fileHandle = fopen("sitemap.csv", "r");

//Loop through the CSV rows.
while (($row = fgetcsv($fileHandle, 0, ",")) !== FALSE) {

    if ($row[0] > $days_since_launch) continue; // display only pages were value in 1st column[0]less that $days_since_launch
    //Print out my column data - exclude 1st column[0]
    echo 'Loc: ' . $row[1] . '<br>';
    echo 'Lastmod: ' . $date . '<br>';
    echo 'changefreq: ' . $row[2] . '<br>';
    echo 'priority: ' . $row[3] . '<br>';
    echo '<br>';
}
       fclose($file_handle);
?> 

1 Ответ

0 голосов
/ 26 февраля 2020

Через много часов мне удалось найти решение, которое считывает файл CSV и отображает действительную карту сайта xml. Благодаря источникам в комментариях кода.

<?php   
//Sources for this solution
    // https://thisinterestsme.com/reading-csv-file-with-php/
    // https://stackoverflow.com/questions/40285479/filtering-and-displaying-a-csv-file-with-php 
    // https://www.webslesson.info/2017/06/make-dynamic-xml-sitemap-in-php-script.html

    header("Content-Type: application/xml; charset=utf-8");

    echo '<?xml version="1.0" encoding="UTF-8"?>'; 

    $date = date("Y-m-d");  // Todays Date
    $date_number = strtotime($date); // Todays date as Integer
    $launchdate_number = strtotime('2020-02-09'); //Launch Date as Integer 1581206400
    $days_since_launch = ($date_number - $launchdate_number) / 86400; // Days since Launch date

    // Echo data for testing, will not be in the final XML file


    $fileHandle = fopen("sitemap.csv", "r");
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">';
    //Loop through the CSV rows.
    while (($row = fgetcsv($fileHandle, 0, ",")) !== FALSE) {

        if ($row[0] > $days_since_launch) continue; // display only pages were value in 1st column[0]less that $days_since_launch
        //Print out my column data - exclude 1st column[0]
     echo '<url>' . PHP_EOL;
     echo '<loc>'. $row[1] .'</loc>' . PHP_EOL;
     echo '<lastmod>'.$date.'</lastmod>' . PHP_EOL;
     echo '<changefreq>'. $row[3] .'</changefreq>' . PHP_EOL;
     echo '<priority>'. $row[4] .'</priority>' . PHP_EOL;
     echo '</url>' . PHP_EOL;  

    }
    echo '</urlset>';
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...