Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

String型からのInputStreamの 取得

32 views
Skip to first unread message

かずほ

unread,
Sep 17, 2003, 11:18:44 AM9/17/03
to
JAVAでDOMの操作をしようとしています(JAVA初心者です)。

---
1: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2: DocumentBuilder builder = factory.newDocumentBuilder();
3: Document = builder.parse(in);
---

テストのため3のところでパースする文書をファイルから読むのではなくソースコー
ドに埋めたいので、javax.xml.parsers.DocumentBuilderクラスのparse(InputStream
is) を使用することとして、InputStreamのサブクラスである
java.io.StringBufferInputStreamが使えると思ったのですが、APIを調べると「非推
奨」となっていました。

ソースコードに書き込んだStringからDOMを生成するにはどのようにすればよいで
しょうか(StringからInputStreamを取得する方法)?

---
かずほ

西野 太郎

unread,
Sep 18, 2003, 1:21:11 PM9/18/03
to
西野と申します。
亀レスで、申し訳ないですが(と言うより最近ニュースグループなんて殆ど見ないので
・・・・)、そういう時のためにjavax.xml.transform.stream.StreamSourceがあるので
す。このコンストラクタにStringReaderを渡せばいいでしょう。初心者だと甘えずに、
あとは研究してみてください。
以上です。

Toru Watanabe

unread,
Sep 19, 2003, 9:49:28 AM9/19/03
to
渡辺です。

西野さん> そういう時のためにjavax.xml.transform.stream.StreamSourceが
西野さん> あるのです。

java.io.ByteArrayInputStreamの方が簡単では?

InputStream in;
String xmlDoc = "<?xml version=\"1.0\"?> \n" +
........................................................................;

in = new ByteArrayInputStream(xmlDoc.getBytes());
builder.parse(in);

かずほ

unread,
Sep 19, 2003, 2:52:06 PM9/19/03
to
"西野 太郎 " <taro-n...@sam.hi-ho.ne.jp> wrote in message
news:bkcpi7$2sv5$1...@dojima-n0.hi-ho.ne.jp...
> と言うより最近ニュースグループなんて殆ど見ないので・・・・

言われてみれば私もニュースグループを見る/投稿するって、1年ぶりくらいなのです
が、よく見るとfj.comp.lang.javaも投稿数少ないですね。皆さんどちらに行かれた
のでしょう?

かずほ

unread,
Sep 19, 2003, 2:47:15 PM9/19/03
to
西野さん、渡辺さん、ありがとうございました。両方で実装してみました。
javax.xml.transform.stream.StreamSourceの方がxmlらしい(?)のかもしれません
が、java.io.ByteArrayInputStreamのほうがかなりコードが少なくて書けるので後者
にしようと思います。


西野 太郎

unread,
Sep 20, 2003, 12:08:01 PM9/20/03
to
西野です。

>java.io.ByteArrayInputStreamのほうがかなりコードが少なくて書けるので

なんと後ろ向きな・・・・。と言うより、何故、あんな使いにくいJAXPにこだわるのでしょうか、Java1.4からバンドルされているからでしょうか。僕ならJDOMを使いますね。因みに、JDOMのorg.jdom.input.SAXBuilderに以下のメソッドがあります。
Document build(java.io.Reader characterStream)
つまり、スピードの速いSAXで読んで、DOMオブジェクトに相当するDocumentを作るわけです。これをDOMに変換することも簡単だし、そんなことをわざわざしなくても、いろいろなことが出来ます。
また、JDOMと一緒にxerces、xalanもバンドルされています。
以上です。

西野 太郎

unread,
Sep 20, 2003, 12:15:47 PM9/20/03
to
西野です。
先ほどの投稿はミス送信しましたので、再度投稿いたします。すみません。

>java.io.ByteArrayInputStreamのほうがかなりコードが少なくて書けるので

なんと後ろ向きな・・・・。と言うより、何故、あんな使いにくいJAXPにこだわるので

かずほ

unread,
Sep 20, 2003, 9:34:01 PM9/20/03
to

"西野 太郎 " <taro-n...@sam.hi-ho.ne.jp> wrote in message
news:bkhufj$fcp$2...@dojima-n0.hi-ho.ne.jp...
> >java.io.ByteArrayInputStreamのほうがかなりコードが少なくて書けるので
>
> なんと後ろ向きな・・・・。

(グサッ…)
そ、そう、書かれると思いました…。

> と言うより、何故、あんな使いにくいJAXPにこだわるので
> しょうか、Java1.4からバンドルされているからでしょうか。

図星です。まずは標準でついているクラスライブラリで作ってみて、我慢できなけれ
ば他を探そうかと…SUNのクラスライブラリのやつは、ちょっとしたことをするにも
準備が大変で面倒くさいという印象でした。今度、JDOMとやらも試してみたいと思い
ます。

panda_...@yahoo.co.jp

unread,
Sep 26, 2003, 11:16:41 AM9/26/03
to
Java と関係ないところに反応してます。。。


かずほ <kaz...@jp.org> writes:

僕も先日、ものすごく久しぶりに ネットニュースを使いました。
コンピュータ関係の本を売ろうと思ったのですが、まったく リアクションな
しでした。

周辺には、「ネットニュースなんて知らない」という人も けっこういるみた
いですし、このままさびれてしまうのかなぁ。
さびしいです。

※あまりにも久しぶりに GNUS 使うので、使い方間違えているかもしれませぬ。
粗相がありましてもご容赦ください。

かずほ

unread,
Nov 3, 2003, 4:50:24 AM11/3/03
to
> なんと後ろ向きな・・・・。と言うより、何故、あんな使いにくいJAXPにこだわる
ので
> しょうか、Java1.4からバンドルされているからでしょうか。僕ならJDOMを使いま
すね。

遅まきながらJDOMを使い始めました。使いやすいです。
…が、ファイルに書き出そうとして、
---
Document doc = new Document(root);
XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");
File f = new File("test.xml");
FileWriter writer = new FileWriter(f);
out.output(doc, writer);
---
としてencodingにUTF-8を指定しても<?xml version="1.0" encoding="UTF-8"?>とは
なるものの肝心の文字コードがUTF-8になっていないようです。java.io.FileWriter
がデフォルトエンコーディングで出力するせいでしょうか?
UTF-8など望みのコードで出力するにはどのようにすればよいでしょうか?

---
かずほ

西野 太郎

unread,
Nov 3, 2003, 10:38:05 AM11/3/03
to
西野です。
もう、ニュースグループは、悪の巣窟になっているようですので、怖いのですが。

>
>遅まきながらJDOMを使い始めました。使いやすいです。
>…が、ファイルに書き出そうとして、
>---
>Document doc = new Document(root);
>XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");
>File f = new File("test.xml");
>FileWriter writer = new FileWriter(f);
>out.output(doc, writer);
>---
>としてencodingにUTF-8を指定しても<?xml version="1.0" encoding="UTF-8"?>とは
>なるものの肝心の文字コードがUTF-8になっていないようです。java.io.FileWriter
>がデフォルトエンコーディングで出力するせいでしょうか?
>UTF-8など望みのコードで出力するにはどのようにすればよいでしょうか?
>
>---
>かずほ
>
そこは、
FileOutputStream writer = new FileOutputStream(f);
out.output(doc, writer);
でございます。
頑張ってください、応援してます。

西野 太郎

unread,
Nov 3, 2003, 12:55:15 PM11/3/03
to
西野です。
先程の記事、完全に嘘です。寝ぼけていました。

>
>FileOutputStream writer = new FileOutputStream(f);
>out.output(doc, writer);
>
ではなくて、全部書くと、以下のとおりです。

Document doc = new Document(root);
XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");
File f = new File("test.xml");
FileWriter writer = new FileWriter(OutputStreamWriter(FileOutputStream(f),
"UTF-8"));
out.output(doc, writer);
です。

Iwao Watanabe

unread,
Nov 3, 2003, 9:26:42 PM11/3/03
to
> 遅まきながらJDOMを使い始めました。使いやすいです。
> …が、ファイルに書き出そうとして、
> ---
> Document doc = new Document(root);
> XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");
> File f = new File("test.xml");
> FileWriter writer = new FileWriter(f);
> out.output(doc, writer);
> ---
> としてencodingにUTF-8を指定しても<?xml version="1.0" encoding="UTF-8"?>とは
> なるものの肝心の文字コードがUTF-8になっていないようです。

ソースを確認すると、
XMLOutputter のコンストラクタでエンコーディング指定を渡しているのなら,
OutputStreamを渡すと、内部でWriterでくるんでくれるようです。

バッファのフラッシュのタイミングを気にしない(GCに任せる)のなら次の記述でOKです。

out.output(doc, new java.io.FileOutputStream(f));


西野 太郎

unread,
Nov 5, 2003, 6:27:11 AM11/5/03
to
西野です。

>ソースを確認すると、
>XMLOutputter のコンストラクタでエンコーディング指定を渡しているのなら,
>OutputStreamを渡すと、内部でWriterでくるんでくれるようです。
>
>バッファのフラッシュのタイミングを気にしない(GCに任せる)のなら次の記述でOKです。
>
>out.output(doc, new java.io.FileOutputStream(f));
>

もちろん、仰るとおりなんですが、質問者のかずほさんが、writer系にこだわっているように見受けられましたし、writerを使う場合は、エンコードを明確にしなければならないことを示すために、最初streamだったのを撤回して、writerでのやり方をお見せした次第です。
以上です。

西野 太郎

unread,
Nov 5, 2003, 6:34:33 AM11/5/03
to
西野です。
先程の記事、書きかけのまま、送信してしまいました。
#最近、ミスが多くて・・・・

>ソースを確認すると、
>XMLOutputter のコンストラクタでエンコーディング指定を渡しているのなら,
>OutputStreamを渡すと、内部でWriterでくるんでくれるようです。
>
>バッファのフラッシュのタイミングを気にしない(GCに任せる)のなら次の記述でOKです。
>
>out.output(doc, new java.io.FileOutputStream(f));
>
もちろん、仰るとおりなんですが、
質問者のかずほさんが、writer系にこだわっているように見受けられましたし、

writerを使う場合は、エンコードを明確することがポイントであることを示す
ために、先にstreamの方を撤回して、writerの方をポストしたわけなんです。
念のため。
以上です。
以上です。

かずほ

unread,
Nov 5, 2003, 7:19:42 AM11/5/03
to

"西野 太郎 " <taro-n...@sam.hi-ho.ne.jp> wrote in message
news:bo64q3$1eaa$1...@dojima-n0.hi-ho.ne.jp...

> 西野です。
> 先程の記事、完全に嘘です。寝ぼけていました。
> >
> >FileOutputStream writer = new FileOutputStream(f);
> >out.output(doc, writer);

Iwao Watanabe <iw...@DSL.gr.jp>さんからも同じ方法を教えていただいた上記の記述
で、


XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");

のエンコード指定部分で指定した文字コードで出力されていることが確認できまし
た。

> ではなくて、全部書くと、以下のとおりです。
> Document doc = new Document(root);
> XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");
> File f = new File("test.xml");
> FileWriter writer = new FileWriter(OutputStreamWriter(FileOutputStream(f),
> "UTF-8"));
> out.output(doc, writer);
> です。

こちらのコード、writerへの代入文の中でそれぞれにnewでオブジェクトを作らなけ
ればならないのでしょうが、それはそれとしてJDKのjavadocをあちこち見て廻っても
良くわかりませんでした。OutputStreamWriterを引数に取るFileWriterのコンストラ
クタが無いようですし。

いずれにしても西野さんにご紹介していただいたおかげで、JDOM、とても気に入って
います。JAXPでの苦痛がウソのようです。なんだかXMLが身近に感じられるようにな
りました。ありがとうございます。

かずほ

unread,
Nov 5, 2003, 7:23:58 AM11/5/03
to

"Iwao Watanabe" <iw...@DSL.gr.jp> wrote in message
news:bo72ug$b7c$1...@wam-soft.com...

> ソースを確認すると、
> XMLOutputter のコンストラクタでエンコーディング指定を渡しているのなら,
> OutputStreamを渡すと、内部でWriterでくるんでくれるようです。
>
> バッファのフラッシュのタイミングを気にしない(GCに任せる)のなら次の記述で
OKです。
>
> out.output(doc, new java.io.FileOutputStream(f));

教えていただいたとおり、XMLOutputterでの指定したコードで出力されることを確認
しました。JDOMのソースを追っかけたわけではないので不思議な感じがしますが…
FileWriterを引数にしたときにはエンコードが反映されないってのは、上記と統一性
が無くて混乱しますね。1.0に期待?

西野 太郎

unread,
Nov 5, 2003, 8:57:46 AM11/5/03
to
西野です。

>
>> Document doc = new Document(root);
>> XMLOutputter out = new XMLOutputter(" ", true, "UTF-8");
>> File f = new File("test.xml");
>> FileWriter writer = new FileWriter(OutputStreamWriter(FileOutputStream(f),
>> "UTF-8"));
>> out.output(doc, writer);
>> です。
>
>こちらのコード、writerへの代入文の中でそれぞれにnewでオブジェクトを作らなけ
>ればならないのでしょうが、それはそれとしてJDKのjavadocをあちこち見て廻っても
>良くわかりませんでした。OutputStreamWriterを引数に取るFileWriterのコンストラ
>クタが無いようですし。
>
おろろ、完全に間違ってますね(よく、見ないで書くから・・・・反省)。

>> FileWriter writer = new FileWriter(OutputStreamWriter(FileOutputStream(f),
>> "UTF-8"));
>> out.output(doc, writer);
ではなくて、
Writer writer = new OutputStreamWriter(FileOutputStream(f), "UTF-8");
out.output(doc, writer);
です。

西野 太郎

unread,
Nov 5, 2003, 9:13:30 AM11/5/03
to
西野です。

>
>教えていただいたとおり、XMLOutputterでの指定したコードで出力されることを確認
>しました。JDOMのソースを追っかけたわけではないので不思議な感じがしますが…
>FileWriterを引数にしたときにはエンコードが反映されないってのは、上記と統一性
>が無くて混乱しますね。1.0に期待?
>
あのですね。XMLOutputterのJavadocには以下の記述があるのをご存知ですか。
<引用>
Warning: When outputting to a Writer, make sure the writer's encoding matches the encoding setting in the XMLOutputter.
</引用>
ですから、Writerの方がエンコードを明確にしないと駄目なんですよ。

かずほ

unread,
Nov 10, 2003, 9:37:42 AM11/10/03
to

"西野 太郎 " <taro-n...@sam.hi-ho.ne.jp> wrote in message
news:bob0i8$oen$1...@dojima-n0.hi-ho.ne.jp...
> あのですね。XMLOutputterのJavadocには以下の記述があるのをご存知ですか。

確かに…ボールドで…
(偶然)同じエンコーディングでうまくいっていて、他のシステムに持っていったと
きにはたと気が付いたので、見落としてました。というか、コンストラクタの記述を
読んで思い込んでいたのがバレバレですね。申し訳ないです。

0 new messages