Создание объектной модели документа для каталога товаров
Как мы говорили в главе 1, исходное создание объектной модели документов на Java очень просто, поскольку вся работа выполняется анализатором, входящим в набор инструментальных средств. В листинге 3.4 показан фрагмент кода, который на основе документа XML строит объект org.w3c.dom.Document. Основная часть кода состоит из инструкций, перехватывающих различные синтаксические ошибки.
Листинг 3.4. Пример синтаксического анализа документа (TheCatalog.java)
]
import javax.xml.parsers.* ;
import org.xml.sax.* ;
import org.w3c.dom.* ;
public class TheCatalog
{
org.w3c.dom.Document catDoc ;
public TheCatalog( File f, TextArea msg, TextField status ){
try {
timestamp = f.lastModified();
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance ();
// statements to configure the DocumentBuilder would go here
DocumentBuilder db = dbf.newDocumentBuilder ();
catDoc = db.parse( f );
}catch(ParserConfigurationException pce){
lastErr = pce.toString();
System.out.println("constructor threw " + lastErr );
}catch(SAXParseException spe ){
StringBuffer sb = new StringBuffer( spe.toString() );
sb.append("\n Line number: " + spe.getLineNumber());
sb.append("\nColumn number: " + spe.getColumnNumber() );
sb.append("\n Public ID: " + spe.getPublicId() );
sb.append("\n System ID: " + spe.getSystemId() + "\n");
lastErr = sb.toString();
System.out.print( lastErr );
}catch( SAXException se ){
lastErr = se.toString();
System.out.println("constructor threw " + lastErr );
se.printStackTrace( System.out );
}catch( IOException ie ){
lastErr = ie.toString();
System.out.println("constructor threw " + lastErr +
" trying to read " + f.getAbsolutePath() );
}
}
Структура данных DOM выстраивается в памяти в такую же иерархическую систему, какая была в документе XML. Объекты Java представляют различные части документа XML и связаны ссылками на соседние элементы, как показано на рис. 1.2 в главе 1. Программные интерфейсы объектов Java, представляющие различные части документа, определены в пакете org.w3c.dom. Каждая часть документа XML, включая корневой элемент, представлена в виде объекта, реализующего интерфейс, который является расширением фундаментального интерфейса Node.