簡體   English   中英

如何從PHP中的多個節點獲取simplexml子級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM