プロが教える店舗&オフィスのセキュリティ対策術

xmlファイルの内容を読み取り、その内容をString文字列として変数に格納したいと考えて以下のようなクラスを作成しましたが、出力してみると、最初にnullが入ってしまい、さらに改行位置でスペースが入ってしまいます。nullも入らず、改行位置に\nを追加した形で、変数に入れたいと考えております。
どのようにすればよろしいのでしょうか。


[読み込みxml]
<?xml version="1.0" encoding="UTF-8"?>
<exp:References>
<IDProviderReference RefType="IdProviderReference">
<OID>-2</OID>
<Name>Internal Identity Provider</Name>
<Props/>
<TypeVal>1</TypeVal>
</IDProviderReference>
</exp:References>


[読み取りクラス]
public XMLRead{
public static void main(String args[])throws Exception{
try{
String POLICY;
BufferedReader br = new BufferedReader(new FileReader("読み取りxml"));
String line;
while ((line = br.readLine()) != null) {
POLICY =POLICY+line;


}
br.close();
}catch(Exception e){
System.out.println(e);
}
  System.out.println("policy: " + POLICY);
}
}

A 回答 (3件)

import java.io.*;



public class XMLRead{
public static void main(String args[]){
String POLICY ="";
/*
変数POLICYの宣言の位置がおかしいと思ったので移動。
また,Stringの初期値がnullなため、最初にnullが入ってしまうようだ
*/

try{

BufferedReader br = new BufferedReader(new FileReader("hoge.xml"));
/*
XMLファイルにBOMが入っていると最初の出力が変に見えるかも
元のXMLファイルを読み込ませたらFirefox(正確にはMinefieldがエラー吐いた。「名前空間接頭辞に名前空間が割り当てられてない」って。
*/
String line;
while ((line = br.readLine()) != null) {

POLICY =POLICY+line + "\n";
/*改行を追加。特に半角空白の空きは見られなかった。XML系のReaderを使うとそうなることもあるかもしれないが、それならそれはXMLの仕様。

ブラウザの話をさせてもらえるなら
FirefoxやOperaは改行を空白文字として連続した空白文字を半角一つに変換するが,IEは要素内容とみなすのか半角空白は生成しない。どちらも許されていたと思う。
*/

}
br.close();
}catch(Exception e){
System.out.println(e);
}
System.out.println("policy: " + POLICY);
}
}
    • good
    • 0

おまけ:


http://www.atmarkit.co.jp/fjava/rensai3/mojibake …

つーことでUTF-8で日本語書くと文字化けします(Windows-31Jで読んでたからBOMがあんな形で出力されたのかも。まぁこのコードでもBOMがあると?がつくんですが。)

import java.io.*;

public class XMLRead{
public static void main(String args[]){
String POLICY ="";
/*
変数POLICYの宣言の位置がおかしいと思ったので移動。
また,Stringの初期値がnullなため、最初にnullが入ってしまうようだ
*/

try{

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("hoge.xml"), "UTF-8")); /* 日本語が含む可能性がある場合、こうしておくべき */
/*
XMLファイルにBOMが入っていると最初の出力が変に見えるかも
元のXMLファイルを読み込ませたらFirefox(正確にはMinefieldがエラー吐いた。「名前空間接頭辞に名前空間が割り当てられてない」って。

なので、名前空間接頭辞の宣言を足しておいてほしい。検証時には削除しちゃったけど(ぉ
*/
String line;
while ((line = br.readLine()) != null) {

POLICY =POLICY+line + "\n";
/*改行を追加。特に半角空白の空きは見られなかった。XML系のReaderを使うとそうなることもあるかもしれないが、それならそれはXMLの仕様。

ブラウザの話をさせてもらえるなら
FirefoxやOperaは改行を空白文字として連続した空白文字を半角一つに変換するが,IEは要素内容とみなすのか半角空白は生成しない。どちらも許されていたと思う。
*/

}
br.close();
}catch(Exception e){
System.out.println(e);
}
System.out.println("policy: " + POLICY);
}
}
    • good
    • 0
この回答へのお礼

基本的なことでも親切に答えていただきまして本当にありがとうございます。
とてもわかりやすく、理解できました。

お礼日時:2007/05/12 03:11

http://www.hellohiro.com/xmlsax.htm

XMLを扱うのなら素直にSAXかDOMを使った方が良い様に思います。
単に属性を取り出すだけなら、とても簡単ですし。

この回答への補足

XMLの構造を解析するならSAX/DOMを使うのですが、そうではなくString文字列として扱いたいので、BufferReaderを使ったのですが、SAX/DOMでも同様なことができるのでしょうか?

補足日時:2007/05/12 03:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!