Разбор InputStreamReader с DocumentBuilder - PullRequest
2 голосов
/ 16 декабря 2011

У меня очень мало опыта Java. Я пытаюсь заставить документ считываться как UTF-8, но застрял, пытаясь подключить считыватель InputStream к сборщику документов.

Вот что у меня есть:

import javax.xml.xpath.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;


if( pathToFile == null ) throw new Exception("You must supply a pathToFile parameter");

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

InputStreamReader in = new InputStreamReader( new FileInputStream( pathToFile ), "utf-8" );

BufferedReader reader = new BufferedReader ( new InputStreamReader ( in ) );

Element records = builder.parse(reader).getDocumentElement();

Буду благодарен, если кто-нибудь может дать мне несколько указателей

Ответы [ 2 ]

8 голосов
/ 16 декабря 2011

Не наматывайте InputStreamReader вокруг вашего InputStreamReader. ( РЕДАКТИРОВАТЬ Кроме того, поскольку нет способа для синтаксического анализа XML с Reader, вам нужно обернуть ридер в InputSource ):

if( pathToFile == null )
    throw new Exception("You must supply a pathToFile parameter");

DocumentBuilder builder = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder();

InputStreamReader in = new InputStreamReader(
    new FileInputStream( pathToFile ), "utf-8" );

BufferedReader reader = new BufferedReader ( in ); // CHANGED

InputSource input = new InputSource(reader);

Element records = builder.parse(input).getDocumentElement();
2 голосов
/ 16 декабря 2011

Предполагая, что это Groovy, вы можете избавиться от большого количества Java-краж:

Не пробовал, но:

if( pathToFile == null ) throw new Exception("You must supply a pathToFile parameter");

Element records = new File( pathToFile ).withReader( "utf-8" ) { r ->
  DocumentBuilderFactory.newInstance().newDocumentBuilder().with { b ->
    b.parse( new InputSource( r ) ).documentElement
  }
}

должно работать ...

...