Re: [問題] 讀取xml字串

看板java作者 (有些事,有時候。。。)時間13年前 (2012/10/26 09:44), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《jackyeah1213 (frog)》之銘言: : 最近在研究讀取xml的問題 : 是使用dom去呼叫 : 但找到的範例大多都是直接讀取檔案 : ex: : File f=new File("data_10k.xml"); :    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); :    DocumentBuilder builder=factory.newDocumentBuilder(); :    Document doc = builder.parse(f); : NodeList nl = doc.getElementsByTagName("VALUE"); : . : . : . : 想請問如果不是讀取檔案的模式 : 而是直接讀取一個字串 : 要如何修正呢? 這種問題通常要先看 api doc 有哪些方法可以用的 http://docs.oracle.com/javase/1.5.0/docs/api/ javax/xml/parsers/DocumentBuilder.html 所以,我們再來複習一下怎麼查 api 唄:P 查文件你會看到下的 parse 方法: Document parse(File f) Parse the content of the given file as an XML document and return a new DOM Document object. abstract Document parse(InputSource is) Parse the content of the given input source as an XML document and return a new DOM Document object. Document parse(InputStream is) Parse the content of the given InputStream as an XML document and return a new DOM Document object. Document parse(InputStream is, String systemId) Parse the content of the given InputStream as an XML document and return a new DOM Document object. Document parse(String uri) Parse the content of the given URI as an XML document and return a new DOM Document object. ====================================================== 以 File 為參數的情況,你已經在用了,但你想要找其它的方法。 而最後一個是吃一個 String 參數,你試著這麼做,但相信是不能動的。 請看它的說明: ... Parse the content of the given URI as ... 你要一個 uri 簡單說是一個有 xml 的網址, 所以你不能直接填 xml content。 去除了 File 與 String 為參數的 parse 方法, 剩下的部分是有機會滿足你目標的。 先來看第 2 個 parse 方法,它接受一個 InputSource 參數 這時你應該不急不徐地點開 InputSource 的 link http://docs.oracle.com/javase/1.5.0/docs/api/ org/xml/sax/InputSource.html 首先,我們先看看建構子。它讓我們知道要如何建立一個 InputSource InputSource() Zero-argument default constructor. InputSource(InputStream byteStream) Create a new input source with a byte stream. InputSource(Reader characterStream) Create a new input source with a character stream. InputSource(String systemId) Create a new input source with a system identifier. 有 4 個建構子,哪些能滿足你輸入 String Content 的需求呢? 看參數是最後一個,但看說明應該是第 2 與第 3 個有機會。 點開 InputStream 的內容! http://docs.oracle.com/javase/1.5.0/docs/api/ java/io/InputStream.html 看一下它的 Direct Known Subclasses: AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream InputStream 是典型的裝飾者模式,簡單說把 OOO 裝飾成 InputStream。 所以 ByteArrayInputStream 就是把 Byte Array 裝飾成 InputStream。 那麼,你就可以將字串轉成 byte[] 放到 ByteArrayInputStream: http://docs.oracle.com/javase/1.5.0/docs/api/ java/io/ByteArrayInputStream.html (在腦中將這個 stack pop) 我們用 String to byte[] 建成 ByteArrayInputStream (在腦中將這個 stack pop) 我們用 ByteArrayInputStream 建成 InputSource (在腦中將這個 stack pop) 我們用 InputSource 建成 Document (不知不覺完成了一回的 BFS) 然後繼續開始操作 DOM 物件。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.110.37

10/26 10:30, , 1F
推用心教學
10/26 10:30, 1F

10/26 11:16, , 2F
GOOD
10/26 11:16, 2F

10/26 11:39, , 3F
10/26 11:39, 3F
文章代碼(AID): #1GYUi9LQ (java)
討論串 (同標題文章)
文章代碼(AID): #1GYUi9LQ (java)