Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
表示しない

String型からのInputStreamの 取得

閲覧: 0 回
最初の未読メッセージにスキップ

かずほ

未読、
2003/09/17 11:18:442003/09/17
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を取得する方法)?

---
かずほ

西野 太郎

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

Toru Watanabe

未読、
2003/09/19 9:49:282003/09/19
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);

かずほ

未読、
2003/09/19 14:52:062003/09/19
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も投稿数少ないですね。皆さんどちらに行かれた
のでしょう?

かずほ

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


西野 太郎

未読、
2003/09/20 12:08:012003/09/20
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もバンドルされています。
以上です。

西野 太郎

未読、
2003/09/20 12:15:472003/09/20
To:
西野です。
先ほどの投稿はミス送信しましたので、再度投稿いたします。すみません。

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

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

かずほ

未読、
2003/09/20 21:34:012003/09/20
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

未読、
2003/09/26 11:16:412003/09/26
To:
Java と関係ないところに反応してます。。。


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

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

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

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

かずほ

未読、
2003/11/03 4:50:242003/11/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など望みのコードで出力するにはどのようにすればよいでしょうか?

---
かずほ

西野 太郎

未読、
2003/11/03 10:38:052003/11/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);
でございます。
頑張ってください、応援してます。

西野 太郎

未読、
2003/11/03 12:55:152003/11/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

未読、
2003/11/03 21:26:422003/11/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));


西野 太郎

未読、
2003/11/05 6:27:112003/11/05
To:
西野です。

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

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

西野 太郎

未読、
2003/11/05 6:34:332003/11/05
To:
西野です。
先程の記事、書きかけのまま、送信してしまいました。
#最近、ミスが多くて・・・・

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

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

かずほ

未読、
2003/11/05 7:19:422003/11/05
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が身近に感じられるようにな
りました。ありがとうございます。

かずほ

未読、
2003/11/05 7:23:582003/11/05
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に期待?

西野 太郎

未読、
2003/11/05 8:57:462003/11/05
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);
です。

西野 太郎

未読、
2003/11/05 9:13:302003/11/05
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の方がエンコードを明確にしないと駄目なんですよ。

かずほ

未読、
2003/11/10 9:37:422003/11/10
To:

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

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

新着メール 0 件