作者nosql (http://pyms.fly.to)
站內java
標題Re: [J2SE] 使用 XSL 轉換 XML
時間Wed Aug 29 08:10:36 2007
先說推測的結論
1.4.2是不能用變形金剛...不對,是不能用XSL+XML+Transformer轉HTML的
可能他們認識的科博文還沒拍電影不夠威...不對,是版本舊可能不支援
以下是我的小實驗
代價是沒得睡
[程式碼(僅關鍵部分)]
StreamSource xsl = new StreamSource("C:/test.xsl");
Transformer trans = TransformerFactory.newInstance().newTransformer(xsl);
trans.transform(new StreamSource("C:/test.xml"),
new StreamResult("C:/test.htm"));
[test.xsl]
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
a<xsl:apply-templates/>a
</xsl:template>
</xsl:stylesheet>
[test.xml]
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<elements>
<block>p</block>
<block>h1</block>
<block>h2</block>
<block>h3</block>
<block>h4</block>
</elements>
在1.4.2_13底下
一定會有一些花花綠綠的例外跑出來例如以下幾行
javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerException: org.xml.sax.SAXParseException:
文件根元件遺失。
at org.apache.xalan.processor.TransformerFactoryImpl.
newTransformer(Unknown Source)
at test0001a.Test0001a04.main(Test0001a04.java:20)
經過兩小時掙扎後
終於跑去裝JDK6 update 2
月蝕一換掉1.4.2_13改用1.6.0_02後
立刻正常的輸出xml出來
東西做出來都天亮...Orz
另外還有發現
好像java遇到比較奇怪的目錄也會有無法轉檔的問題
還在實驗中=x=
---
以下程式碼
StreamSource xsl = new StreamSource(fileXSL);
StreamSource src = new StreamSource(fileXML.getAbsolutePath());
StreamResult res = new StreamResult(fileHTM.getAbsolutePath());
Transformer trans = null;
trans = TransformerFactory.newInstance().newTransformer(xsl);
trans.transform(src, res);
上面黃色標明的地方
StreamSource可傳入的除String Path外, 也可傳入File Path
可是不知道為什麼
xsl的部分
只要傳
String Path一定會出現
重要錯誤
沒圖沒真相
以下兩張有跑的時候的情形
http://photo.xuite.net/mingray/1953109/1.jpg
http://photo.xuite.net/mingray/1953109/2.jpg
由圖中可以看到程式碼傳入一改, 程式立刻爛掉
似乎是蠻奇怪的情形
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.49.132
推 PsMonkey:之前測,xml 放在中文路徑會有問題 (@ JDK5.0) 08/29 13:59
※ 編輯: nosql 來自: 61.230.49.132 (08/29 14:21)
推 nosql:多增一些地方了, 不曉得jdk 1.5是否也是此情形, 懶得多裝了 08/29 14:21
推 teman:1.4版測試時 有用apache xalan嗎 jdk1.4預設可能沒納入支援 08/30 10:58
→ nosql:我用eclipse3.2去看,rt.jar裡面有org.apache.xalan存在 08/30 12:25
→ nosql:可是用org.apache.xpath.XPath的時候跟我說無法解析 08/30 12:38
→ nosql:xalan.processor.TransformerFactoryImpl.newTransformer 08/30 13:16
→ nosql:(Unknown Source) 另外還有這樣的錯誤 08/30 13:20
推 teman:試試看去抓apache xalan 新版的來跑跑 sample 08/30 18:38
→ teman:有時候jdk預設的api沒有包含完整或是使用版本有新舊問題 08/30 18:39
→ nosql:掛上Xerces-J-bin.2.9.0.zip之後的內容後似乎就可以跑@@a 08/31 02:54
→ nosql:看來真的是xerces API沒掛上去的問題 08/31 03:05