作者qrtt1 (有些事,有时候。。。)
看板java
标题Re: [问题] 读取xml字串
时间Fri Oct 26 09:44:38 2012
※ 引述《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
1F:推 superlubu:推用心教学 10/26 10:30
2F:推 gmoz:GOOD 10/26 11:16
3F:→ LaPass:推 10/26 11:39