[英]How to get simplexml child from multiple nodes in php
我想在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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.