2012-06-04 6 views
3

У меня есть следующий метод Java:Как успокоить org.w3c.dom.Document?

private static Document documentFromFile(final File xmlFile) 
{ 
    Document document = null; 
    try 
    { 
     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory 
      .newInstance(); 
     DocumentBuilder docBuilder = docBuilderFactory 
      .newDocumentBuilder(); 
     document = docBuilder.parse(xmlFile); 
     document.getDocumentElement().normalize(); 
    } 
    catch(Exception exc) 
    { 
     // Handle exception... 
    } 

    return document; 
} 

В моих методах испытаний, если я прохожу этот метод искаженный файл XML, я получаю все виды вывода ошибок на моей консоли:

[Fatal Error ]: 1: 1: Содержимое не допускается в прологе.

[Fatal Error]: 1: 1: преждевременный конец файла.

Предполагаю, что виновником является docBuilder.parse(xmlFile). Я хотел бы отключить этот вывод по умолчанию и «замолчать» создатель документа, и я не вижу никаких методов setter для этого объекта, которые позволяют мне делать что-либо подобное. У меня есть средства здесь, или я придерживаюсь этого?

+0

Какие [реализации] (http://www.jarfinder.com/index.php/java/info/org.w3c.dom.Document) библиотеки манипулирования DOM мы говорим? И какая версия? У DocumentBuilderFactory есть метод setAttribute, но вы должны знать, какое имя свойства установить. –

+0

См., Если применимо к вам: [«как отключить dtd во время выполнения в jpath xpath?»] (Http://stackoverflow.com/q/243728/1322198) и [«Как игнорировать проверку DTD, но сохраняйте Doctype, когда написав файл XML? "] (http://stackoverflow.com/q/582352/1322198) –

+0

Я использую' javax.xml.parsers. * 'для lib и использую проверку схемы XSD ... – IAmYourFaja

ответ

3

Используйте DocumentBuilder.setErrorHandler для установки реализации ErrorHandler. Не путайте имя пакета. Несмотря на то, что он говорит «org.xml.sax», это тот, который вы хотите. Я думаю, вы можете просто использовать DefaultHandler, потому что Javadoc говорит, что он игнорирует ошибки и предупреждения. Если он все еще слишком многословный, вы можете просто предоставить свою собственную реализацию.

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
db.setErrorHandler(new DefaultHandler()); 
Смежные вопросы