Я хочу составить список календарей по срокам исполнения на HTML-странице. Я использую XML-файл в качестве источника, который не так много работы для редактирования. Беда в том, чтобы получить правильный контент презента на странице.
Вот как будет выглядеть xml:
<?xml version="1.0" encoding="UTF-8"?>
<type>
<part1>
<month>
january
<date>
15.
<deadline>
deadline 1
deadline 2
deadline 3
</deadline>
</date>
<date>
24.
<deadline>
deadline 4
deadline 5
</deadline>
</date>
<date>
30.
<deadline>
deadline 6
deadline 7
</deadline>
</date>
</month>
<month>
february
<date>
6.
<deadline>
deadline 8
deadlline 9
</tekst>
</date>
</month>
</part1>
</type>
Мне нужен php-код, чтобы получить каждый срок на каждой дате каждого месяца на странице.
Я пытался с «foreach» муравей получил месяцы, но у меня возникла проблема, когда у меня есть дети на узлах.
Я хотел бы получить php примерно так:
January
15. deadline 1
deadline 2
deadline 3
24. deadline 4
deadline 5
30. deadline 6
deadline 7
February
6. deadline 8
......
Если кто-нибудь поймет, что я хочу, и сможет мне помочь, это будет оценено.
@starf прав, это не правильный XML. Но это не мешает нам разбирать его. Для верхнего уровня мы используем парсер XML, для нижнего — функцию php. Это рабочий код
<?
$str = '<?xml version="1.0" encoding="UTF-8"?>
<type>
<part1>
<month>
january
<date>
15.
<deadline>
deadline 1
deadline 2
deadline 3
</deadline>
</date>
<date>
24.
<deadline>
deadline 4
deadline 5
</deadline>
</date>
<date>
30.
<deadline>
deadline 6
deadline 7
</deadline>
</date>
</month>
<month>
february
<date>
6.
<deadline>
deadline 8
deadlline 9
</deadline>
</date>
</month>
</part1>
</type>';
$cal = new SimpleXMLElement($str);$nmonth=0;
foreach($cal->part1->month as $month) {
echo $month.'<br/>';
$ndate = 0;
foreach($cal->part1->month[$nmonth]->date as $date) {
echo $date.'<br/>';
// print_r($cal->part1->month[$nmonth++]->date[$ndate]->deadline);
foreach($cal->part1->month[$nmonth]->date[$ndate]->deadline as $deadline) {
$dead = preg_split('/\n/', $deadline);
foreach ($dead as $d)
if (!empty($d)) echo $d.'<br/>';
}
$ndate++;
}
$nmonth++;
}
результат:
january
15.
deadline 1
deadline 2
deadline 3
24.
deadline 4
deadline 5
30.
deadline 6
deadline 7
february
6.
deadline 8
deadlline 9
Цитирую свой вопрос …
Я использую XML-файл в качестве источника, который не так много работы для редактирования
… Я предполагаю, что вы контролируете исходный файл XML, поэтому могу ли я предложить вам внести небольшие изменения, чтобы сделать его действительным XML, прежде чем пытаться его проанализировать? Это пример того, как модифицированный XML может выглядеть так:
<?xml version="1.0" encoding="UTF-8"?>
<type>
<part1>
<month name="January">
<day number="15">
<deadline>Deadline 1</deadline>
<deadline>Deadline 2</deadline>
<deadline>Deadline 3</deadline>
</day>
<day number="24">
<deadline>Deadline 4</deadline>
<deadline>Deadline 5</deadline>
</day>
<day number="30">
<deadline>Deadline 6</deadline>
<deadline>Deadline 7</deadline>
</day>
</month>
<month name="February">
<day number="6">
<deadline>Deadline 8</deadline>
<deadline>Deadline 9</deadline>
</day>
</month>
</part1>
</type>
Пример кода для анализа этого, генерируя желаемый результат:
$xml = new SimpleXMLElement($source); // $source is XML content above
foreach ($xml->part1->month as $month) {
echo $month['name'];
foreach ($month->day as $day) {
echo "<ol>";
echo '<li value="', $day['number'] . '.' , '">';
echo implode('<br />', (array)$day->deadline);
echo '</li>';
echo "</ol>";
}
}
Вывод (с отступом для наглядности):
January
<ol>
<li value="15.">
Deadline 1<br/>
Deadline 2<br/>
Deadline 3
</li>
</ol>
<ol>
<li value="24.">
Deadline 4<br/>
Deadline 5
</li>
</ol>
<ol>
<li value="30.">
Deadline 6<br/>
Deadline 7
</li>
</ol>
February
<ol>
<li value="6.">
Deadline 8<br/>
Deadline 9
</li>
</ol>