私がここで提案するものは何もテストされていませんが、これらは私が取ると思うルートです。
応答の長さが短いと予想される場合は、個人的には、連結されたXML応答Stringを提案どおりに配置し、標準的なString方法を使用して個々のXMLドキュメントを抽出するか、提案したようにXMLを削除します。宣言文字列を作成し、ルート要素のペアでロット全体をラップします。XMLパーサーに単一のドキュメントをフィードするか、複数のドキュメントをフィードするかによって異なります。私は昔から扱っていませんが、を使用して応答エンティティのを取得し、そこからを取得するために可能な多くの方法の1つを使用BasicHttpResponseできると思います。InputStreammBasicHttpResponse.getEntity().getContent()StringInputStream
一方、かなり長いデータを処理することを期待している場合、または応答エンティティに連結されたXMLドキュメントの数が不確定である可能性がある場合は、代わりに、取得InputStreamしたデータをカスタムでラップするInputStreamかReader、(a)ストリッピングを実行することを検討します。宣言と(b)新しいルート要素の挿入。SOには、対処する宣言がなかったことを除いて、ここで直面している問題と非常によく似た質問をした人がいます。user656449の回答を見るInputStreamと、SAXパーサーに渡す前にいくつかのダミールート要素でラップする方法の提案があります。
(参照されたSOの質問/回答から露骨にコピー):
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser parser = saxFactory.newSAXParser();
parser.parse(
new SequenceInputStream(
Collections.enumeration(Arrays.asList(
new InputStream[] {
new ByteArrayInputStream("<dummy>".getBytes()),
new FileInputStream(file),//bogus xml
new ByteArrayInputStream("</dummy>".getBytes()),
}))
),
new DefaultHandler()
);
しかし、さらにこの状況では、宣言行のストリッピングを実行するために自分で作成したFileInputStreamものに置き換えます。から取得したものをラップアラウンドしてから、 CustomFilterFileInputStreamaddsを使用して新しいルートタグを追加します。CustomFilterFileInputStreamInputStreamBasicHttpResponseSequenceInputStream
このようにXMLデータを実際に受け入れる必要があり、1回の応答で大量のXMLデータを処理することを期待している場合は、このような方向に進む必要があると思います。