如何从php中的多个节点获取simplexml子节点

时间:2015-04-30 20:03:47

标签: php html simplexml nodes children

我想在HTML页面上的varius截止日期列出日历列表。我使用XML文件作为源,编辑起来并不多。麻烦的是在页面上获得正确的内容presentet。

这有点像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代码来获取每个月的每个日期到页面的每个截止日期。 我试过&#34; foreach&#34;蚂蚁得了几个月,但是当我在节点上生孩子时遇到了问题。

我希望php直到得到这样的输出:

January
15. deadline 1
    deadline 2
    deadline 3

24. deadline 4
    deadline 5

30. deadline 6
    deadline 7

February
6. deadline 8
......

如果有人理解我想要什么,并且可以帮助我,那将不胜感激。

1 个答案:

答案 0 :(得分:0)

引用你的问题......

  

我使用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>";
    }
}

输出(为清晰起见缩进):

&#13;
&#13;
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>
&#13;
&#13;
&#13;