атрибут simplexml для цикла

#xml #parsing #simplexml

#xml #синтаксический анализ #simplexml

Вопрос:

я пытаюсь вывести XML-данные в таблицу html

как я могу получить все атрибуты TITLE, ARTIST в таблице с помощью цикла foreach без их записи вручную

 <thead>
    <tr>
        <th>TITLE</th>
        <th>ARTIST</th>
    </tr>
</thead>
  

с помощью этого кода я получаю XML-данные.

     $xml = new SimpleXMLElement('http://www.w3schools.com/xml/cd_catalog.xml', 0, true);

  foreach($xml->CD as $cd)
    {

    echo '<tr>';
    echo '<td>'.$cd->TITLE.'</td>';
    echo '<td>'.$cd->ARTIST.'</td>';
    echo '</tr>';

    }
  

Комментарии:

1. Ваш код выглядит неплохо, однако нам нужно знать xml, чтобы определить, правильно ли это, а если нет, то почему

2. в моем коде я получаю только атрибуты, но я также хочу автоматически получать имена тегов, такие как «title», «artist» для таблицы

3. как cd_catalog.xml похоже, там есть названия?

4. вы можете открыть w3schools.com/xml/cd_catalog.xml <КАТАЛОГ><CD><НАЗВАНИЕ>Империя Бурлеска</НАЗВАНИЕ><ИСПОЛНИТЕЛЬ> Боб Дилан </ИСПОЛНИТЕЛЬ><СТРАНА> США </СТРАНА><КОМПАНИЯ> Колумбия </КОМПАНИЯ><ЦЕНА> 10.90</ЦЕНА><ГОД> 1985 </ГОД></CD><CD><НАЗВАНИЕ> Спрячь свое сердце </TITLE><ИСПОЛНИТЕЛЬ> Бонни Тайлер </ИСПОЛНИТЕЛЬ> <СТРАНА> ВЕЛИКОБРИТАНИЯ </COUNTRY><КОМПАНИЯ> CBS Records </COMPANY> <ЦЕНА> 9.90</ЦЕНА><ГОД>1988 </ГОД></CD></CATALOG>

5. Скорее всего, вы имеете в виду не атрибуты, а элементы. Пожалуйста, проверьте формальную номенклатуру XML, иначе ваш вопрос может показаться немного странным.

Ответ №1:

Если я вас правильно понимаю, вы хотите динамически записывать заголовок и содержимое, для этого вам нужен определенный корневой узел (для вашего примера это будет CD)

$xml = новый элемент SimpleXMLElement(‘http://www.w3schools.com/xml/cd_catalog.xml ‘, 0, истина);

 echo '<table>';
echo '<thead>';
echo '    <tr>';
foreach ($xml->CD[0]->children() as $child)
{
    echo '<th>'.$child->getName().'</th>';
}
echo '    </tr>';
echo '</thead>';

foreach($xml->CD as $cd) {
    echo '<tr>';
    foreach ($cd->children() as $child) {
      echo '<td>'.$child.'</td>';
    }
    echo '</tr>';

}

echo '</table>';
  

Что-то вроде этого