簡體   English   中英

使用PHP將表轉換為XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM