Php 使用XSLT从未知XML创建格式良好的嵌套表

Php 使用XSLT从未知XML创建格式良好的嵌套表,php,xml,xslt,dom,xslt-1.0,Php,Xml,Xslt,Dom,Xslt 1.0,给我的任务: 我的老板希望我创建一个XSLT,它接受未知结构的XML,并将其放入一个嵌套表(标记名为表头),尽可能不重复表头。我几乎能得到他想要的东西(桌子) 问题: 我现在只使用XSLT几天(已经学习了一些教程并使用了一点),所以如果有人能告诉我在哪里可以找到帮助我解决问题的信息,我将不胜感激 环境数据:我正在使用XSLT和PHP(DOM对象)。我的老板希望我成为公司的XSLT专家,因此如果可以通过纯XSLT实现,我将不胜感激 附加信息:应响应者的请求,附加信息(代码)如下。任务是将类似于下面

给我的任务: 我的老板希望我创建一个XSLT,它接受未知结构的XML,并将其放入一个嵌套表(标记名为表头),尽可能不重复表头。我几乎能得到他想要的东西(桌子)

问题: 我现在只使用XSLT几天(已经学习了一些教程并使用了一点),所以如果有人能告诉我在哪里可以找到帮助我解决问题的信息,我将不胜感激

环境数据:我正在使用XSLT和PHP(DOM对象)。我的老板希望我成为公司的XSLT专家,因此如果可以通过纯XSLT实现,我将不胜感激

附加信息:应响应者的请求,附加信息(代码)如下。任务是将类似于下面的XML片段的内容转换为下表以供显示。不幸的是,我所拥有的代码目前处于不断变化的状态,因此我不会发布它(如果当我再次稳定它时问题仍然存在,我将发布它)

XML片段:

<root>
    <request>
        <details>
            <columnname>name1</columnname>
            <operator></operator>
            <value>val</value>
            <seq>1</seq>
        </details>
    </request>
    <request>
        <details>
            <columnname>name2</columnname>
            <operator>OP</operator>
            <value>val</value>
            <seq>2</seq>
        </details>
    </request>
    <request>
        <details>
            <columnname>name3</columnname>
            <value>val</value>
            <seq>3</seq>
        </details>
    </request>
    <response>
        <details>
            <columnname>name4</columnname>
            <value>val</value>
            <seq>4</seq>
        </details>
    </response>
</root>

名称1
瓦尔
1.
姓名2
操作
瓦尔
2.
名字3
瓦尔
3.
名字4
瓦尔
4.
所需输出

<table border="1" style="border-collapse:collapse;width:100%">
    <tr>
        <th>root</th>
    </tr>
    <tr>
        <td>
            <table border="1" style="border-collapse:collapse;width:100%">
                <tr>
                    <th>request</th>
                    <th>response</th>
                </tr>
                <tr>
                    <td>
                        <table border="1" style="border-collapse:collapse;width:100%">
                            <tr>
                                <th>details</th>
                            </tr>
                            <tr>
                                <td>
                                    <table border="1" style="border-collapse:collapse;width:100%">
                                        <tr>
                                            <th>columnname</th>
                                            <th>operator</th>
                                            <th>value</th>
                                            <th>seq</th>
                                        </tr>
                                        <tr>
                                            <td>name1</td>
                                            <td></td>
                                            <td>val</td>
                                            <td>1</td>
                                        </tr>
                                        <tr>
                                            <td>name2</td>
                                            <td>OP</td>
                                            <td>val</td>
                                            <td>2</td>
                                        </tr>
                                        <tr>
                                            <td>name3</td>
                                            <td></td>
                                            <td>val</td>
                                            <td>3</td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                    <td>
                        <table border="1" style="border-collapse:collapse;width:100%">
                            <tr>
                                <th>details</th>
                            </tr>
                            <tr>
                                <td>
                                    <table border="1" style="border-collapse:collapse;width:100%">
                                        <tr>
                                            <th>columnname</th>
                                            <th>value</th>
                                            <th>seq</th>
                                        </tr>
                                        <tr>
                                            <td>name4</td>
                                            <td>val</td>
                                            <td>4</td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
<?xml version="1.0" encoding="UTF-8"?>
<ul>
   <li>root<ul>
         <li>parent<ul>
               <li>child<ul>
                     <li>string</li>
                     <li>number</li>
                     <li>grandchild<ul>
                           <li>string</li>
                           <li>substring</li>
                           <li>number</li>
                        </ul>
                     </li>
                     <li>date</li>
                  </ul>
               </li>
               <li>nephew<ul>
                     <li>string</li>
                  </ul>
               </li>
            </ul>
         </li>
         <li>uncle<ul>
               <li>niece<ul>
                     <li>string</li>
                  </ul>
               </li>
            </ul>
         </li>
      </ul>
   </li>
</ul>

根
要求
响应
细节
列名
操作人员
价值
序号
名称1
瓦尔
1.
姓名2
操作
瓦尔
2.
名字3
瓦尔
3.
细节
列名
价值
序号
名字4
瓦尔
4.
对michael的回应。hor257k:看起来像这样

<table border="1" style="border-collapse:collapse;width:100%">
    <tr>
        <th>root</th>
    </tr>
    <tr>
        <td>
            <table border="1" style="border-collapse:collapse;width:100%">
                <tr>
                    <th>parent</th>
                    <th>uncle</th>
                </tr>
                <tr>
                    <td>
                        <table border="1" style="border-collapse:collapse;width:100%">
                            <tr>
                                <th>child</th>
                                <th>nephew</th>
                            </tr>
                            <tr>
                                <td>
                                    <table border="1" style="border-collapse:collapse;width:100%">
                                        <tr>
                                            <th>string</th>
                                            <th>number</th>
                                            <th>grandchild</th>
                                            <th>date</th>
                                        </tr>
                                        <tr>
                                            <td>A</td>
                                            <td></td>
                                            <td></td>
                                            <td></td>
                                        </tr>
                                        <tr>
                                            <td>B</td>
                                            <td></td>
                                            <td></td>
                                            <td></td>
                                        </tr>
                                        <tr>
                                            <td>C</td>
                                            <td>1</td>
                                            <td>
                                                <table border="1" style="border-collapse:collapse;width:100%">
                                                    <tr>
                                                        <th>string</th>
                                                        <th>substring</th>
                                                        <th>number</th>
                                                    </tr>
                                                    <tr>
                                                        <td>DD</td>
                                                        <td>EE</td>
                                                        <td>33</td>
                                                    </tr>
                                                </table>
                                            </td>
                                            <td></td>
                                        </tr>
                                        <tr>
                                            <td></td>
                                            <td>2</td>
                                            <td></td>
                                            <td></td>
                                        </tr>
                                        <tr>
                                            <td>F</td>
                                            <td></td>
                                            <td></td>
                                            <td>2015-02-12</td>
                                        </tr>
                                    </table>
                                </td>
                                <td>
                                    <table border="1" style="border-collapse:collapse;width:100%">
                                        <tr>
                                            <th>string</th>
                                        </tr>
                                        <tr>
                                            <td>G</td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                    <td>
                        <table border="1" style="border-collapse:collapse;width:100%">
                            <tr>
                                <th>niece</th>
                            </tr>
                            <tr>
                                <td>
                                    <table border="1" style="border-collapse:collapse;width:100%">
                                        <tr>
                                            <th>string</th>
                                        </tr>
                                        <tr>
                                            <td>H</td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

根
父母亲
叔叔
小孩
侄子
一串
数
孙子
日期
A.
B
C
1.
一串
子串
<root>
   <parent>
      <child>
         <string>A</string>
         <string>B</string>
      </child>
      <child>
         <string>C</string>
         <number>1</number>
         <number>2</number>
         <grandchild>
            <string>DD</string>
            <substring>EE</substring>
            <number>33</number>
         </grandchild>
      </child>
   </parent>
   <parent>
      <child>
         <string>F</string>
         <date>2015-02-12</date>
      </child>
      <nephew>
         <string>G</string>
      </nephew>
   </parent>
   <uncle>
      <niece>
         <string>H</string>
      </niece>
   </uncle>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<ul>
   <li>root<ul>
         <li>parent<ul>
               <li>child<ul>
                     <li>string</li>
                     <li>number</li>
                     <li>grandchild<ul>
                           <li>string</li>
                           <li>substring</li>
                           <li>number</li>
                        </ul>
                     </li>
                     <li>date</li>
                  </ul>
               </li>
               <li>nephew<ul>
                     <li>string</li>
                  </ul>
               </li>
            </ul>
         </li>
         <li>uncle<ul>
               <li>niece<ul>
                     <li>string</li>
                  </ul>
               </li>
            </ul>
         </li>
      </ul>
   </li>
</ul>