Привет! Есть xml файл такого содержания:
| Код | <?xml version = "1.0"?> <note> <to> Вася </to> <from> Петя </from> <head> Напоминание </head> <body> Когда в конце концов? </body> </note>
|
Мне нужно записать в файл только то, что находится между тегов, делаю это так:
| Код | public class ReadXML extends DefaultHandler{ public void getXml(){ try { // Получение и настройка парсера SAX SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// Получение объекта SAX SAXParser saxParser = saxParserFactory.newSAXParser(); // Обработчик по умолчанию DefaultHandler defaultHandler = new DefaultHandler(){
String noteTag = "close"; String toTag = "close"; String fromTag = "close"; String headTag = "close"; String bodyTag = "close";
// Метод начинате работу, когда встретит '<' @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("note")) { noteTag = "open"; } if (qName.equalsIgnoreCase("to")) { toTag = "open"; } if (qName.equalsIgnoreCase("from")) { fromTag = "open"; } if (qName.equalsIgnoreCase("head")) { headTag = "open"; } if (qName.equalsIgnoreCase("body")) { bodyTag = "open"; } }
// Метод берет значениея между '<' и '>' @Override public void characters(char ch[], int start, int length) throws SAXException { File file = new File("out.txt"); try { PrintWriter out = new PrintWriter(file.getAbsoluteFile());
try { if (fromTag.equals("open")) { out.println("Список отправителей: " + new String(ch, start, length)); // System.out.println("Список отправителей: " + new String(ch, start, length)); } if (toTag.equals("open")) { out.println("Список получателей: " + new String(ch, start, length)); // System.out.println("Список получателей: " + new String(ch, start, length)); } if (headTag.equals("open")) { out.println("Заголовки: " + new String(ch, start, length)); // System.out.println("Заголовки: " + new String(ch, start, length)); } } finally { out.close(); } } catch(Exception ex) { throw new RuntimeException(ex); } }
// Метод закрывает теги @Override public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("NOTE")) { noteTag = "close"; } if (qName.equalsIgnoreCase("TO")) { toTag = "close"; } if (qName.equalsIgnoreCase("FROM")) { fromTag = "close"; } if (qName.equalsIgnoreCase("HEAD")) { headTag = "close"; } if (qName.equalsIgnoreCase("BODY")) { bodyTag = "close"; } } };
saxParser.parse("1.xml", defaultHandler); } catch (Exception ex) { ex.printStackTrace(); } } }
|
Запись в файл у меня происходит в методе characters, но проблема в том, что выходной файл пуст! Я может не правильно записываю? P.S. В консоль выводит все верно. |