Re: [問題] 讀取xml字串
※ 引述《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
10/26 11:16, 2F
→
10/26 11:39, , 3F
10/26 11:39, 3F
討論串 (同標題文章)