2011-12-16 4 views
2

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

Вот что я до сих пор:

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

Просьба уточнить "приходят застряли" в деталях. Что происходит вместо этого? – BalusC

+2

Я получаю это: groovy.lang.GroovyRuntimeException: Не удалось найти подходящий конструктор для: java.io.InputStreamReader (java.io.InputStreamReader) –

+0

Посмотрите, у вас уже есть ответ. – BalusC

ответ

2

Предполагая, что это 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 
    } 
} 

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

+0

Это Groovy, но ваш пример дает мне ошибку: не удается разрешить класс InputSource, есть ли что-то дополнительное, которое я должен импортировать? –

+0

Да, [org.xml.sax. InputSource] (http://docs.oracle.com/javase/6/docs/api/org/xml/sax/InputSource.html). Я не верю, что DocumentBuilder может вызывать синтаксический анализ на Reader –

7

Не обернуть вокруг InputStreamReaderInputStreamReader. (EDIT Кроме того, так как нет никакого метода для разбора 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(); 
+0

Я получаю ту же ошибку, что и в комментариях выше: groovy.lang.MissingMethodException: Нет сигнатуры метода: com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse() применим для типов аргументов: (java.io.BufferedReader) - Я уверен, что, должно быть, что-то пропустил, но что? –

+0

@Jack - см. Отредактированный код –

+0

Спасибо Тед. Хотя я нашел ваш пример намного проще, я принял другой ответ, потому что он немного конденсирован, и из него многое можно узнать. –

Смежные вопросы