0

XML ファイルからデータを取得し、XSLT で変換しています。テーブルを作成したいノードが 1 つあります。

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

1 に答える 1

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-publicおよび属性はdoctype-system、XHTML の正しい doctype 宣言を作成します。
  • 残りは と に変換する だけ<Row>です。これは 2 つの単純なテンプレートを使用して簡単に行うことができます。<tr><Cell><td>
  • <xsl:template match="Data[@ss:Type='Number']">特定のデータ型を異なる形式で出力するような、より特殊なテンプレートを追加で作成できます。
于 2012-12-07T15:48:17.750 に答える