[英]Converting a table into XML using PHP
因此,基本上,我一直在嘗試將HTML表轉換為XML(使用PHP)。
我沒有任何有效的代碼。 它應該來自:
<table>
<thead>
<tr>
<th align="left">label1</th>
<th align="left">label2</th>
<th align="left">label3</th>
<th align="left">label4</th>
</tr>
</thead>
<tbody>
<tr>
<td>DATA1</td>
<td>DATA2</td>
<td>DATA3</td>
<td>DATA4</td>
</tr>
</tbody>
</table>
類似於以下內容:
<root>
<0>
<label1>DATA1</label1>
<label2>DATA2</label2>
<label3>DATA3</label3>
<label4>DATA4</label4>
</0>
</root>
我無法找到任何函數或代碼來執行此操作。
您的要求通常可以通過PHP中提供的XSLTProcessor功能來解決。 使用XSL文件完成特定的轉換。
這是您要求的特殊情況
請注意,我使用的是<R0> ... <R1>,而不是<0> <1>,因為它不是XML元素的有效標記名。
xml-trans.php(要執行的CLI文件)
<?php
$xslDoc = new DOMDocument();
$xslDoc->load('thexhtml.xsl');
$xmlDoc = new DOMDocument();
$xmlDoc->load('thexhtml.html');
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>
thexhtml.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="table/tbody/tr">
<xsl:variable name="rowNum" select="position()-1" />
<xsl:element name="R{$rowNum}" >
<xsl:for-each select="td">
<xsl:variable name="colNum" select="position()" />
<xsl:variable name="header" select="/table/thead/tr/th[position()=$colNum]"/>
<xsl:element name="{$header}" >
<xsl:value-of select="text()" />
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
thexhtml.html(表中還有更多行用於測試。)
<table>
<thead>
<tr>
<th align="left">label1</th>
<th align="left">label2</th>
<th align="left">label3</th>
<th align="left">label4</th>
</tr>
</thead>
<tbody>
<tr>
<td>DATA11</td>
<td>DATA12</td>
<td>DATA13</td>
<td>DATA14</td>
</tr>
<tr>
<td>DATA21</td>
<td>DATA22</td>
<td>DATA23</td>
<td>DATA24</td>
</tr>
<tr>
<td>DATA31</td>
<td>DATA32</td>
<td>DATA33</td>
<td>DATA34</td>
</tr>
</tbody>
</table>
我的測試結果
php xsl-trans.php > theresult.xml
theresult.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<R0>
<label1>DATA11</label1>
<label2>DATA12</label2>
<label3>DATA13</label3>
<label4>DATA14</label4>
</R0>
<R1>
<label1>DATA21</label1>
<label2>DATA22</label2>
<label3>DATA23</label3>
<label4>DATA24</label4>
</R1>
<R2>
<label1>DATA31</label1>
<label2>DATA32</label2>
<label3>DATA33</label3>
<label4>DATA34</label4>
</R2>
</root>
希望對您有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.