2012-12-07 3 views
0

XML 파일에서 데이터를 가져 와서 XSLT로 변환합니다. 하나의 노드에서 테이블을 만들고 싶습니다.노드 XML, XSLT에서 테이블 만들기

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

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

나는 테이블과 같이 할 :

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 : value-select = "$ file/Workbook/Worksheet/Table"/>을 사용할 때를 제외하고는 데이터를 가져 오는 데 문제가 있습니다. 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의 네임 스페이스 그렇지 않으면 결과 문서가 XHTML되지 않습니다, 당신의 XSLT의 기본 네임 스페이스로 선언해야합니다.
  • Excel의 스프레드 시트 네임 스페이스를 선언해야합니다. Excel에서 사용하는 동일한 접두사 인 ss을 사용해야합니다.
  • doctype-publicdoctype-system 속성은 XHTML에 대한 올바른 doctype 선언을 만듭니다.
  • 나머지는 <Row><tr><Cell> ~ <td>으로 변환하는 문제이며 두 개의 간단한 템플릿을 사용하면 간단합니다.
  • 다른 서식으로 특정 데이터 형식을 출력하는 <xsl:template match="Data[@ss:Type='Number']">과 같은보다 전문화 된 템플릿을 작성할 수 있습니다.
관련 문제