2016-09-24 16 views
0

基本的に、私はHTMLテーブルをXML(PHP付き)に変換しようとしています。PHPを使ってテーブルをXMLに変換する

私は機能するコードを持っていません。次のようなものに

<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> 

私はこれを行うために、任意の関数、またはコードを見つけることができませんでした。

答えて

2

あなたが求めているのは、通常、PHPで利用可能なXSLTProcessorの機能で解決されます。特定の変換はXSLファイルを使用して行われます。

は、ここでは、それがXML要素のための有効なタグ名ではないであろうと、私は<R0> ... <R1>、ない< 0> < 1>を使用

注意を要求している特殊なケースです。

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> 

は、私はそれは私がまだupvoteすることはできません

+0

に役立ちますが、それは働いていた願っています。ありがとう! – Aaron

関連する問題