Re: [J2SE] 使用 XSL 轉換 XML

看板java作者 (http://pyms.fly.to)時間18年前 (2007/08/29 08:10), 編輯推噓4(408)
留言12則, 3人參與, 最新討論串3/3 (看更多)
先說推測的結論 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="" rel="nofollow">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

08/29 13:59, , 1F
之前測,xml 放在中文路徑會有問題 (@ JDK5.0)
08/29 13:59, 1F
※ 編輯: nosql 來自: 61.230.49.132 (08/29 14:21)

08/29 14:21, , 2F
多增一些地方了, 不曉得jdk 1.5是否也是此情形, 懶得多裝了
08/29 14:21, 2F

08/30 10:58, , 3F
1.4版測試時 有用apache xalan嗎 jdk1.4預設可能沒納入支援
08/30 10:58, 3F

08/30 12:25, , 4F
我用eclipse3.2去看,rt.jar裡面有org.apache.xalan存在
08/30 12:25, 4F

08/30 12:38, , 5F
可是用org.apache.xpath.XPath的時候跟我說無法解析
08/30 12:38, 5F

08/30 13:16, , 6F
xalan.processor.TransformerFactoryImpl.newTransformer
08/30 13:16, 6F

08/30 13:20, , 7F
(Unknown Source) 另外還有這樣的錯誤
08/30 13:20, 7F

08/30 18:38, , 8F
試試看去抓apache xalan 新版的來跑跑 sample
08/30 18:38, 8F

08/30 18:39, , 9F
有時候jdk預設的api沒有包含完整或是使用版本有新舊問題
08/30 18:39, 9F

08/30 18:42, , 10F
08/30 18:42, 10F

08/31 02:54, , 11F
掛上Xerces-J-bin.2.9.0.zip之後的內容後似乎就可以跑@@a
08/31 02:54, 11F

08/31 03:05, , 12F
看來真的是xerces API沒掛上去的問題
08/31 03:05, 12F
文章代碼(AID): #16rBc4DT (java)
文章代碼(AID): #16rBc4DT (java)