為Excel定義匯出XML的對映

2021-05-24 22:13:34 字數 1328 閱讀 2573

excel如何把其中的資料匯出成xml,我本來以為挺簡單的,試了下才發現excel需要乙個xml對映檔案才能完成。開始之前都有一些基本概念,比如xml啊,dtd啊,不過大家肯定都看過html,就那個樣,開始吧?

xml已經應用灰常灰常廣泛了,從資料儲存,資料表示都有它的蹤跡。現在ui設計也都基於xml做了。xml包含的只是資料,資料需要有格式,這樣子大家才都看得明白(沒有格式似乎也看得明白,不過軟體程式就不會像你那麼聰明了)。用來定義xml結構的是dtd應用很廣,不過現在xml schema已經成為w3c的標準了,我也覺得xml schema爽些,因為它自身就是一種xml的格式,還提供資料型別。更多的dtd和xml schema的區別可以參考

言歸正傳,excel需要的對映可以通過定義乙個xml schema來實現,就是乙個xsd檔案。先看看官方定義:

xml schema 是基於 xml 的 dtd 替代者。

xml schema 描述 xml 文件的結構。

xml schema 語言也稱作 xml schema 定義(xml schema definition,xsd)。

如何定義它呢?我看了下面的例子就頓悟了:

乙個xml檔案內容:

其對應的xml schema xsd內容:

再看看對應的dtd,是不是不是很爽啊?

當然定義的結構檔案dtd或者xsd都需要在xml檔案中引入,很簡單啦就不說啦。

xml schema檔案通過一些元素來定義xml檔案中的乙個結點,比如reminder對應的是,其中的type表示該結點資料的資料型別,這裡是乙個字串。

xml schema中還有兩個奇怪的結點和。前乙個表示這是乙個複雜型別,相當於結點之下還有結點,乙個遞迴的層次。是一種復合型別指示器,表示它所包含的結點都是有順序的,當然也可以沒有順序啦。

有了乙個基本的認識就開始處理乙個實際問題了,有乙個**:包含兩列,第一列名為abbreviation,第二列名為metabolite。每一列包含500行資料,要求就是將其匯出成xml。根據前面的認識,我們可能設計成將資料表示成這樣:

真樣子相應的xml schema應該是這樣:

沒有問題,但這似乎這能表示excel表中的一行資料,也就是說我們需要item能夠出現多次,對於這個需求來說至少需要500次。如何做呢?我們就需要乙個occurrence 指示器,來定義某個元素出現的頻率。它包含兩個指示器:maxoccurs 指示器,minoccurs 指示器,分別設定最小和最大的重複次數。加進來就成這樣,我們允許item出現無限次:

再次設定對映關係,匯出成功。

更多的xml schema相關資訊,參考

Repeater匯出為excel格式

資料繫結到repeater1 下面是將repeater1的內容匯出的示例 system.io.stringwriter sw new system.io.stringwriter system.web.ui.htmltextwriter hw new system.web.ui.htmltextwr...

Repeater 匯出為excel格式

stringwriter sw new stringwriter htmltextwriter hw new htmltextwriter sw this.rptsaleorder.rendercontrol hw response.clear response.charset rptsaleord...

SpringMVC實現匯出為Excel

spring mvc實現將資料匯出為excel檔案 宣告介面,通過實現該介面實現將模型中的資料寫入workbook中 public inte ce excelexportservice 建立自定義的檢視類繼承org.springframework.web.servlet.view.document....