duanchun5520 2019-05-16 09:34 采纳率: 0%
浏览 75

使用php和xml在html中创建数组的问题

i have some problem when i want create a simple html array. I use php to get information from a xml file. I get the good information but many times so i want them just one time.

I tried to create 2 for but it is not worth so i delete 1 for and i tried to move the foreach but it is not the real problem, i juste don't know what can i do.

Here is the xml file :

<?xml version="1.0"?>
<users>
    <info>
        <lname>test</lname>
        <fname>test</fname>
        <email>test@test.com</email>
        <password>******</password>
        <role>Membre</role>
    </info>
    <info>
        <lname>test2</lname>
        <fname>test2</fname>
        <email>test2@test.com</email>
        <password>******</password>
        <role>Super-Administrateur</role>
    </info>
    <info>
        <lname>test3</lname>
        <fname>test3</fname>
        <email>test3@test.com</email>
        <password>*******</password>
        <role>Administrateur</role>
    </info>
</users>

Here is the code :

<table border="1">
        <?php
        $nbrLigne = $xml->getElementsByTagName('info')->length;
        foreach ($xml->getElementsByTagName('info') as $item) {
            for ($i=0; $i<$nbrLigne; $i++) {
                echo "<tr>";

                echo "<td>" . $item->parentNode->getElementsByTagName('fname')->item($i)->nodeValue . "</td>";
                echo "<td>" . $item->parentNode->getElementsByTagName('lname')->item($i)->nodeValue . "</td>";
                echo "<td>" . $item->parentNode->getElementsByTagName('email')->item($i)->nodeValue . "</td>";
                echo "<td>" . $item->parentNode->getElementsByTagName('role')->item($i)->nodeValue . "</td>";

                echo "</tr>";
            }
        }
        ?>
    </table>

Here is the result :

Result of the test

  • 写回答

1条回答 默认 最新

  • douwo3665 2019-05-16 09:59
    关注

    Yeah, don't know why you're going back up in the tree, using "parentNode". This seems to work :

    <table border="1">
        <?php
        foreach ($xml->getElementsByTagName('info') as $item) {
                echo "<tr>";
                echo "<td>" . $item->getElementsByTagName('lname')->item(0)->nodeValue. "</td>";
                echo "<td>" . $item->getElementsByTagName('fname')->item(0)->nodeValue. "</td>";
                echo "<td>" . $item->getElementsByTagName('email')->item(0)->nodeValue. "</td>";
                echo "<td>" . $item->getElementsByTagName('role')->item(0)->nodeValue. "</td>";
                echo "</tr>";
        }
        ?>
    </table>
    

    Also, you could refactor like this, for lisibility:

    <table border="1">
    <?php
    foreach ($xml->getElementsByTagName('info') as $item) {
        echo "<tr>";
        foreach(['lname', 'fname', 'email', 'role'] as $field){
            echo "<td>" . $item->getElementsByTagName($field)->item(0)->nodeValue. "</td>";
        }
        echo "</tr>";
    }
    ?>
    </table>
    
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?