doulouxun6756 2018-06-14 14:31
浏览 31
已采纳

PHP:在表中输出XML数据

Can someone please help me figure out how to output the below XML contents in a HTML table:

XML:

       <student>
        <name>John</name>
        <map>
        <competency>
          <level>5</level>
          <skill name="Maths"> 
             <skillinfo> "some value" </skillinfo>
          </skill>
        <competency>
      <competency>
          <level>4</level>
          <skill name="Science"> 
             <skillinfo> "some value" </skillinfo>
          </skill>
        <competency>
      <competency>
          <level>5</level>
          <skill name="Technology"> 
             <skillinfo> "some value" </skillinfo>
          </skill>
        <competency>
        </map>
    <team name ="Alpha">
    </team>
        </student>
<student>
        <name>James</name>
        <map>
        <competency>
          <level>3</level>
          <skill name="Maths"> 
             <skillinfo> "some value" </skillinfo>
          </skill>
        <competency>
      <competency>
          <level>1</level>
          <skill name="Science"> 
             <skillinfo> "some value" </skillinfo>
          </skill>
        <competency>
        </map>
    <team name ="Alpha">
    </team>
        </student>

What I need is to output student information for team named 'Alpha' in a table.

The output should have student name, skill name and level score. So in the above example, I want to first check whether the student belongs to Team Alpha, and if so output their 'name' (John) and 'level' (5) and 'skill' (technology).

The script will also check if John has the particular skill before outputting the 'level' score for that skill. If this 'skill' does not exist (meaning it is not in the XML file) I want to leave the contents for 'level' in the table blank.

So far I'm able to find the team name using xpath query and then get each competency in a for loop. Then I'm able to find the skill name by using the getAttribute('name') which I then use to check whether that particular skill exists. But what I'm not able to figure out in an efficient manner is how to output the score attached to that skill if that particular skill exists.

Desired Output:

Student Name    Maths    Technology    Science
John              5          5           4
James             3                      1

Hope this makes sense. Thank you in advance.

UPDATE: I managed to figure out how to do this but I'm not able to output the table properly. Problem with the below output is that when a skill is not found, the table shifts the value to the left.

So the output will look like this

Student Name    Maths    Technology    Science
John              5          5           4
James             3          1

Rather it should be:

Student Name    Maths    Technology    Science
John              5          5           4
James             3                      1 

CODE:

   function displayResult() {       
        $data = getXML($URL);         
        $dom = new DOMDocument;
        $dom->loadXML($data);
        $xpath = new DomXpath($dom);
        echo"<table class='table table-striped table-hover' text-center>
            <thead>
            <tr>
              <th>Student Name</th>
              <th>Maths</th>
              <th>Technology</th>
              <th>Science</th>                                                                    
              </tr>
          </thead>
          <tbody>"; 
        echo"<tr>";                                 
  foreach($xpath->query('//student') as $node)  {   
                $getname = ($node->getELementsByTagName('Name'));
                $StudentName = $getname[0]->nodeValue;          
                echo"<td>$StudentName</td>";                                                                                
                foreach($node-> getELementsByTagName('competency') as $scoreNode){              
                    $getskill = $scoreNode -> getELementsByTagName('skill');
                    $sk = $getskill[0]->getAttribute('name');       
                    if ($sk== 'Maths') {
                        foreach($scoreNode->childNodes as $compNode)                            
                            if ($compNode->tagName == 'level') {
                            echo"<td>$compNode->nodeValue</td>";
                            }                                               
                    }
                    if ($sk== 'Science') {
                        foreach($scoreNode->childNodes as $compNode)                            
                            if ($compNode->tagName == 'level') {
                            echo"<td>$compNode->nodeValue</td>";
                            }                                               
                    }                   

                    if ($sk== 'Technology') {
                        foreach($scoreNode->childNodes as $compNode)                            
                            if ($compNode->tagName == 'level') {
                            echo"<td>$compNode->nodeValue</td>";
                            }                                               
                    }                       

            }                               
                echo " </tr>";  
        }
        echo "</tbody>
        </table>";
    }
  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 利用kmeans或kshape聚类分析对归一化的无量纲时间-降雨序列进行聚类
      • ¥20 misc尽快完成,急! ! !
      • ¥15 protel99.SE提示一下弹窗
      • ¥15 银河麒麟v10 执行.run失败如何解决
      • ¥15 如何用Python打开LA文件
      • ¥15 用mysql做一个高校工资管理系统
      • ¥21 Multisim设计用三端集成稳压器设计稳压电路
      • ¥15 tp6,在iframe里的网址通过获取url参数失败
      • ¥15 打开opendaylight查看拓扑,为什么直接就显示了两个Switch,在mininet配置了一个topo,这两个Switch还在
      • ¥15 无法远程连接pgsql