2012-12-07 109 views
0

我從XML文件獲取數據並使用XSLT對其進行轉換。我有一個我想從中創建表的節點。從節點XML創建表XSLT

<?xml version="1.0" encoding="utf-8"?> 

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:variable name="file" select="document('file.xml')"/> 

<xsl:template match="/"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <table> 
      <xsl:value-of select="$file/Workbook/Worksheet/Table"/> 
     </table> 
    </body> 
</html> 

//output: id firstname lastname 8 Jonas Berg 15 Adam Jones ... 

我想表的樣子:

id firstname lastname 
8  Jonas  Berg 
... 

我能做到這一點?從表

XML示例:

<Row> 
<Cell ss:Index="2"><Data ss:Type="String">id</Data></Cell> 
<Cell ss:StyleID="s62"><Data ss:Type="String">firstname</Data></Cell> 
<Cell><Data ss:Type="String">lastname</Data></Cell> 
</Row> 
    <Row> 
    <Cell ss:Index="2"><Data ss:Type="Number">8</Data></Cell> 
    <Cell ss:StyleID="s62"><Data ss:Type="String">Jonas</Data></Cell> 
    <Cell><Data ss:Type="String">Berg</Data></Cell> 
    </Row> 
+0

請提供xml示例,可能您要查找的是http://www.w3schools.com/xsl/xsl_for_each.asp – drk

+0

感謝您的回答,編輯了我的問題。除了在使用時嘗試使用xsl:for-each時,我遇到問題。 – ana

+0

「我可以那樣做嗎?」是的,你可以這麼做。你這樣做的明確問題是什麼?我也看不出這個問題與PHP有關。你用什麼來轉換XML:XSLT或PHP? – feeela

回答

1

這是非常簡單的。唯一的挑戰是正確地獲取XML名稱空間。

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns="http://www.w3.org/1999/xhtml" 
> 
    <xsl:output 
    type="xml" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 
    /> 

    <xml:strip-space elements="*" /> 

    <xsl:template match="/"> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <table> 
     <xsl:apply-templates /> 
     </table> 
    </body> 
    </xsl:template> 

    <xsl:template match="Row"> 
    <tr><xsl:apply-templates /></tr> 
    </xsl:template> 

    <xsl:template match="Cell"> 
    <td><xsl:apply-templates /></td> 
    </xsl:template> 

    <xsl:template match="Data"> 
    <xsl:value-of select="." /> 
    </xsl:template> 

</xsl:stylesheet> 

  • XHTML命名空間必須聲明爲您的XSLT默認命名空間,否則結果文件不會XHTML。
  • Excel的電子表格名稱空間必須聲明 - 我使用了Excel使用的相同前綴 - ss
  • doctype-publicdoctype-system屬性爲XHTML創建正確的doctype聲明。
  • 其餘的問題是將<Row>改爲<tr><Cell>改爲<td>,這對於兩個簡單的模板來說很簡單。
  • 您可以編寫其他更專用的模板,如<xsl:template match="Data[@ss:Type='Number']">,它們可以使用不同的格式輸出某些數據類型。