2016-11-15 8 views
-1

xml宣言<?xml version='1.0'?>を含んでも含まなくてもよいfileInputStreamオブジェクトがあります。 xml宣言があればそれを削除する必要があります。 inputStreamオブジェクトを文字列に変換せずにXML PIを取り除き、入力ストリームに変換し直すことなく、どうすればいいですか?javaで入力ストリームの最初の数文字を取り除く方法は?

InputStream inputStream = new FileInputStream(importFilePath); 
+1

これはXML処理命令ではなく、XML宣言と呼ばれています...データが無効になる可能性があるエンコードタイプなど、xmlに関する重要な情報を含む可能性があります...これはあなたが本当にやるべきことです? –

+0

あなたは正しいです。 PIではありません。シナリオでは入力ストリームの先頭にを追加し、蒸気の最後にを追加する必要があり、結果ストリームをorg.w3c.dom.Document.parseに渡す必要があるため、PIとして参照しました)。 parseメソッドは、 "org.xml.sax.SAXParseException:処理命令はxmlで始める必要がありません"という例外をスローしていました。例外は、XML宣言の始まりを指していて、PIがXMLで始まってはならないと言っています。 – arun8

+0

はい。私の目標は、inputStreamからxml宣言を取り除くことです。 – arun8

答えて

4

PushbackInputStreamFileInputStreamをラップし、それはPIで始まるかどうかを確認します。もしそうなら、それを読んでください。それ以外の場合は、読み込んだ文字をプッシュバックしてテストします。

1

私は2つのオプションを考えることができます:

  1. 使用FileInputStream.getChannel()。チャンネルから読み込んだ後、必要に応じてposition(0)を呼び出して、最初にリセットすることができます。

  2. カスタムFilteredInputStreamを使用して、InputStreamをラップします。これは、使用されるか廃棄されるかを決定するために、最初の行が前もってバッファされるように書くことができます。

+0

@MattTimmermansが指摘したように、#2(PushbackInputStream)で述べた目的を果たすFilteredInputStreamの実装が利用可能です。ただし、最初の行だけでなく、連続バッファも維持します。 –

関連する問題