Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форматирование XML 
:(
    Опции темы
YuG
Дата 3.8.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 20.2.2006

Репутация: нет
Всего: 4



Есть ли на этой планете какая-нибудь библиотечка, класс и т.д. для форматирования XML строки.
То есть, нужен метод
Код

public String formatXML(String xml) {
   //.....
}

который для вот такой строки
Код
<zzz><zzz>zzz</zzz></zzz>

вернет вот такую:
Код
<zzz>
    <zzz>zzz</zzz>
</zzz>



PM WWW ICQ Skype   Вверх
batigoal
Дата 3.8.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Средствами DOM такая запись делается так:
Код

TransformerFactory tf = TransformerFactory.newInstance();
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(file);

Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");

Последняя срока и ответственна за отступы.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
YuG
Дата 3.8.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 20.2.2006

Репутация: нет
Всего: 4



Lamer George
и хорошо, и плохо.

Написал я, по твоему совету, вот так:
Код

    /**
     * Return formatted xml string.
     * 
     * @param xml the input xml string.
     * @return formatted xml string.
     * @throws ParserConfigurationException if failure.
     * @throws IOException if failure.
     * @throws SAXException if failure.
     * @throws TransformerException if failure.
     */
    public static String getFormatXML(String xml)
        throws SAXException, IOException, 
            ParserConfigurationException, TransformerException {
        
        StringReader stringReader = new StringReader(xml);
        InputSource fromSource = new InputSource(stringReader);
        
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder = factory.newDocumentBuilder();
        
        Document document = builder.parse(fromSource);
        
        return getFormatXML(document);
    }
    
    /**
     * Return formatted xml string.
     * 
     * @param document the input document.
     * @return formatted xml string.
     * @throws ParserConfigurationException if failure.
     * @throws IOException if failure.
     * @throws SAXException if failure.
     * @throws TransformerException if failure.
     */
    public static String getFormatXML(Document document)
        throws SAXException, IOException, 
            ParserConfigurationException, TransformerException {
        
        DOMSource source = new DOMSource(document);
        
        OutputStream output = new ByteArrayOutputStream();
        StreamResult streamResult = new StreamResult(output);

        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        
        transformer.transform(source, streamResult);

        return output.toString();
    }

    /**
     * Application main method.
     * @param args input arguments array.
     * @throws Exception if an error occurs during processing.
     */
    public static void main(String[] args) throws Exception {
        String xml = "<zzz><zzz><zzz>zzz</zzz></zzz></zzz>";
        xml = getFormatXML(xml);
        System.out.println(xml);
    }


В результате получил:
Код

<?xml version="1.0" encoding="UTF-8"?>
<zzz>
<zzz>
<zzz>zzz</zzz>
</zzz>
</zzz>

А где же долгожданные отступы, спрашивается? 
Так что шчасця нет :-)
PM WWW ICQ Skype   Вверх
Devorior
Дата 3.8.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 1.8.2002
Где: Обнинск

Репутация: 1
Всего: 3



я использую вот такой кусок кода:
Код

OutputFormat format = new OutputFormat(document);
        format.setIndenting(true);
        format.setEncoding(encoding);
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(new File(xmlFileName));
            XMLSerializer serializer = new XMLSerializer(outputStream, format);
            serializer.serialize(document);
        } catch (FileNotFoundException e) {
            log.error("File for write xml not found. File name: " + xmlFileName + ';', e);
        } catch (IOException e) {
            log.error("IO exception in work with file for write xml. File name: " + xmlFileName + ';', e);
        } finally {
            try {
                if (outputStream != null)
                    outputStream.close();
            } catch (IOException e) {
                log.error(e);
            }
        }

PM MAIL ICQ   Вверх
YuG
Дата 3.8.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 20.2.2006

Репутация: нет
Всего: 4



Devorior, вот за это спасибо.
Отлично работает.
PM WWW ICQ Skype   Вверх
марина
Дата 25.4.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



спасибо за ссылку, но я совсем новичок , только пытаюсь разобраться с хмл
Это мой код без красивого форматирования. Он работает.Записывает файл модели.
Код

public class ModelFileWriter {
    private INeuroNetSchema mySchema;
    private org.w3c.dom.Node myRoot;

    public ModelFileWriter(INeuroNetSchema diagram) throws
        ParserConfigurationException {
        mySchema = diagram;
        myRoot = createDocument();
    }

    private org.w3c.dom.Node createDocument()
        throws ParserConfigurationException {
        Document doc = DocumentBuilderFactory.newInstance()
            .newDocumentBuilder().newDocument();
        Element root = doc.createElement("model");
        root.appendChild(writeSchema(doc));
        if (mySchema.getNeuroNet() != null) {
            root.appendChild(writeObject(doc));
        }
        return root;
    }

    private Element writeSchema(Document doc) {
        Element schemaElement = doc.createElement("schema");
        Element e;
        List<? extends ILayerSchema> list = mySchema.getLayersSchema();
        for (ILayerSchema n : list) {
            e = doc.createElement("layer");
            e.setAttribute("type", getTypeSchema(n));
            e.setAttribute("x", (new Integer(n.getX())).toString());
            e.setAttribute("y", (new Integer(n.getY())).toString());
            e.setAttribute("width", (new Integer(n.getWidth())).toString());
            e.setAttribute("height", (new Integer(n.getHeight())).toString());

            schemaElement.appendChild(e);
        }

        for (ILayerSchema nn : list){
            for (IConnectionSchema a : nn.getOutputConnectionsSchema()) {
                if (a != null) {
                    e = doc.createElement("connection");
                    e.setAttribute("source",
                        (new Integer(list.indexOf(nn))).toString());
                    e.setAttribute("destination",
                        (new Integer(list.indexOf(a.getDestLayerSchema()))).toString());
                    e.setAttribute("direct", new Boolean(a.isDirect()).toString());
                    schemaElement.appendChild(e);
                }
            }
        }
        return schemaElement;
    }

    private Element writeObject(Document doc) {
        Element objectElement = doc.createElement("object");
        Element e;
        INeuroNet net = mySchema.getNeuroNet();
        List<? extends ILayer> list = net.getLayers();
        for (ILayer n : list) {
            e = doc.createElement("layer");
            e.setAttribute("type", getTypeObject(n));
            e.setAttribute("numNeurons", (new Integer(n.getNeuronsNumber())).toString());
            if (n.getActivation() != null) {
                e.setAttribute("functor", n.getActivation().getNameFunction());
            } else {
                e.setAttribute("functor", "null");
            }
            e.setAttribute("id", new Integer(net.getLayers().indexOf(n)).toString());
            objectElement.appendChild(e);
        }
        Element weights;
        Element row;
        Element w;
        for (ILayer nn : list){
            for (IConnection a : nn.getOutputConnections()) {
                if (a != null) {
                    e = doc.createElement("connection");
                    e.setAttribute("source",
                        (new Integer(list.indexOf(nn))).toString());
                    e.setAttribute("destination",
                        (new Integer(list.indexOf(a.getDestLayer()))).toString());
                    e.setAttribute("delay", new Integer(a.getDelay()).toString());

                    weights = doc.createElement("weights");
                    for (int i = 0; i < a.getWeights().length; i++) {
                        row = doc.createElement("row");
                        for (int j = 0; j < a.getWeights()[0].length; j++) {
                            w = doc.createElement("w");
                            w.setAttribute("value", new Double(a.getWeights()[i][j]).toString());
                            row.appendChild(w);
                        }
                        weights.appendChild(row);
                    }
                    e.appendChild(weights);
                    objectElement.appendChild(e);
                }
            }
        }
        return objectElement;
    }


    public void write(String filename) throws IOException,
        TransformerConfigurationException, TransformerException {
        java.io.FileWriter fw = new java.io.FileWriter(filename);
        Transformer tr = TransformerFactory.newInstance().newTransformer();

        tr.setOutputProperty(OutputKeys.INDENT, "yes");
        tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

        tr.transform(new DOMSource(myRoot), new StreamResult(fw));
        fw.close();
    }

}


 Я пыталась сделать по аналогии, с тем что написано выше, но не получилось.
Дело в том что если ему передать документ - то файл перестанет записываться или будет записана только верхняя строчка.
Помогите распутаться, куда и что вставить?
я пыталась делать так 
Документ, то же что и раньше, просто сделала его полем класса.
До этого у меня был рут полем класса и его я передавала new DOMSource(myRoot).

[code=java
private Document myDocument;

[/code]

Код

    public void write(String filename) throws IOException,
        TransformerConfigurationException, TransformerException {
        OutputFormat format = new OutputFormat(myDocument);
        format.setIndenting(true);
        format.setEncoding("UTF-8");
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(new File(filename));
            XMLSerializer serializer = new XMLSerializer(outputStream, format);
            serializer.serialize(myDocument);
        } catch (FileNotFoundException e) {
            System.out.println("File for write xml not found. File name: " + filename + ';');
        } catch (IOException e) {
            System.out.println("IO exception in work with file for write xml. File name: " + filename + ';');
        } finally {
            try {
                if (outputStream != null)
                    outputStream.close();
            } catch (IOException e) {
                System.out.println(e);
            }
        }
}


PM MAIL   Вверх
ochnev
Дата 3.10.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 253
Регистрация: 27.3.2006

Репутация: нет
Всего: нет



А откуда этот класс OutputFormat, из какого пакета, из какой библиотеки?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0970 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.