Использование вложенных циклов while для подтегей (скрипт PHP генерирует динамический файл XML)

1

Я только начал изучать PHP и XML, так что несите меня! Мне нужно создать динамический XML файл из базы данных MYSQL с использованием PHP-скрипта.

Я хочу, чтобы мой вывод выглядел так:

<Post>
  <Title>
  <Tags>
    <Tag>
    <Tag>
    <Tag>
  <Date>
  etc.
</Post>

<Post>
</Post>

Теперь я успешно сделал запрос и использовал его в While-Loop. Но у меня есть второй запрос, который нужно реализовать. Первый запрос обрабатывает все теги, такие как Title, Date и все остальные теги, которые находятся на одном уровне. Но для тегов мне нужны субтитры, для которых требуется второй запрос.

Теперь, как мне создать вложенный цикл while, который вставляет данные в теги? Проблема состоит в том, что каждая почта имеет несколько тегов (или только одну), и я не знаю, как возможно, чтобы скрипт php "входил" в теги, вставлял тег-элементы, определенные вторым запросом, а затем возвращался на один уровень и продолжает выполнение первого запроса (будет здесь Date).

Может быть, мне не нужен второй цикл, я не знаю!

  • 0
    То, что вы просите, также известно как сериализация (реляционных) данных базы данных в виде XML . Это чрезвычайно важная тема, когда вы начинаете копаться в этом, используя поисковую систему по вашему выбору, вы можете найти многое из плохо написанных, устаревших руководств, хорошо сделанных библиотек для работы, документации поставщиков баз данных об их продуктах и даже научных работ , Ваш вопрос может быть значительно улучшен, если вы покажете, что вы пробовали до сих пор (даже если код работает не так, как вы того хотите), поэтому становится более ясным, в какой момент вы действительно застряли. В противном случае, большая, большая, большая тема, которую вы спрашиваете.
  • 0
    Спасибо за ваш ответ! Я сейчас добавил свой код. Я просто не знаю, как поступить: /
Показать ещё 1 комментарий
Теги:
loops
while-loop

1 ответ

1
Лучший ответ

Нет проблем с вложением в петлях, кроме возможных проблем с производительностью, которые возникают с большими наборами данных (потому что если вы правильно поняли, у вас есть запрос для <tags> для каждого <post>).

Просто так гнезди свои циклы (если вы отправляете запрос для каждого тега):

<?php
$result = $mysqli -> query("SELECT * FROM posts");

$xmlBody = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xmlBody .= "<XML>";

while($post = $result -> fetch_array()) {

   $xmlBody .= "<post>";

   $xmlBody .= "<title>" . $post['title'] . "</title>";

   // ....

   $xmlBody .= "<tags>";

   $tags_result = $mysqli -> query("
       SELECT * 
       FROM tags 
       WHERE id='" . $post['id'] . "'
   ");

   while($tag = $tags_result -> fetch_array()) {
     $xmlBody .= "<tag>" . $tag['tag'] . "</tag>";
   }

   $xmlBody .= "</tags>";

   // More Info (for example date)....

   $xmlBody .= "</post>";

}

Это написано полностью слепо, но я надеюсь, что это иллюстрирует то, что вы хотите достичь довольно хорошо. Вместо этого вы, вероятно, должны изучить использование предварительно написанного API для XML, например SimpleXML. Кроме того, возможно, это возможно сделать в одном запросе MySQL с использованием JOIN.

@hakre Вот что я подумал, я просто приводил пример того, что он описал. Я бы прокомментировал, что пример был бы полезен, если бы я мог (недостаточно репутации).

Обновить:

Я обновил приведенный выше пример кода. Извините за ошибку, которую я сделал в использовании этого синтаксиса: $post → title. Это применимо только в том случае, если $post был объектом, а это не так.

Для пояснения я использовал объектно-ориентированный синтаксис в MySQL-запросах и выборках. См. Это для справки.

  • 0
    Спасибо! Хотя ваше решение выглядит хорошо, у меня есть некоторые проблемы с пониманием основного синтаксиса здесь. Я узнал об этом только путем написания тегов в теле xml. Теперь я чувствую, что мой код немного плохой ...
  • 0
    Нет, твой код совсем не плохой. Я просто привык писать все максимально компактно. Я вижу, что вам нужно иметь все ваши XML в одной переменной, поэтому я отредактирую свой пример выше и сделаю синтаксис более читабельным для вас.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню