Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
123_Tibet_321
0 / 0 / 0
Регистрация: 25.01.2016
Сообщений: 16
1

Java и xml

26.01.2017, 14:35. Просмотров 245. Ответов 4

Задание: дано два файла xml. Необходимо вывести их на экран как в примере.

1.xml
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="windows-1251"?>
<note>
<to>Леша</to>
<from>Женя</from>
<heading>Привет</heading>
<body>Привет, друг!</body>
</note>
2.xml
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="windows-1251"?>
<note>
<to>Маша</to>
<from>Рита</from>
<heading>Завтра</heading>
<body>Не забудь принести подарок!</body>
</note>
Как должно быть
От:
Леша
Маша
Кому:
Женя
Рита
Тема:
Привет
Завтра
Сообщение:
Привет, друг!
Не забудь принести подарок!

Так вот. Я могу написать код для двух xml, но они выводятся на экран один за другим (содержимое 1-го файла и следом содержимое 2-го), не так, как в примере.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.io.BufferedWriter;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
 
public class лаба3 
{
    public static void main(String[] args) 
    {
    try 
    {
        File fXmlFile = new File("C:/ee.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();
    NodeList nList = doc.getElementsByTagName("note");
    for (int temp = 0; temp < nList.getLength(); temp++) 
        {
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) 
            {
                Element eElement = (Element) nNode;
                System.out.println("От: " + eElement.getElementsByTagName("to").item(0).getTextContent());
                System.out.println("Кому: " + eElement.getElementsByTagName("from").item(0).getTextContent());
        System.out.println("Тема: " + eElement.getElementsByTagName("heading").item(0).getTextContent());
        System.out.println("Сообщение: " + eElement.getElementsByTagName("body").item(0).getTextContent());
            }
            out.close();
        }
        
        File fXmlFile2 = new File("C:/e.xml");
    DocumentBuilderFactory dbFactory2 = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder2 = dbFactory2.newDocumentBuilder();
    Document doc2 = dBuilder2.parse(fXmlFile2);
        doc2.getDocumentElement().normalize();
    NodeList nList2 = doc2.getElementsByTagName("note");
    for (int temp = 0; temp < nList2.getLength(); temp++) 
        {
            Node nNode2 = nList2.item(temp);
            if (nNode2.getNodeType() == Node.ELEMENT_NODE) 
            {
                Element eElement = (Element) nNode2;
                System.out.println("От: " + eElement.getElementsByTagName("to").item(0).getTextContent());
                System.out.println("Кому: " + eElement.getElementsByTagName("from").item(0).getTextContent());
        System.out.println("Тема: " + eElement.getElementsByTagName("heading").item(0).getTextContent());
        System.out.println("Сообщение: " + eElement.getElementsByTagName("body").item(0).getTextContent());
            }
        }
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    }
}


П.С. - можно ли объединить два for и if в одно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2017, 14:35
Ответы с готовыми решениями:

Как представить элементы java.ArrayList содержащие другие java.ArrayList в виде XML - XSL?
Здравствуйте Вопрос: Подскажите пожалуйста чайнику, как можно представить...

Java + Xml
Добрый день, можете подсказать добавляю данные в xml, следующим образом: ...

Парсинг XML в java
Помогите с программой пожалуйста (хотя бы задайте верное направление) Имеется...

Обработка xml в Java
Здравствуйте, форумчане. Нужен Ваш совет. Вот в чем суть: на сервере лежит...

работа с xml в java
Зачем используется xml и в каких случаях он применяется в java ? Какая его...

4
xoraxax
1339 / 1281 / 378
Регистрация: 05.07.2013
Сообщений: 6,133
Завершенные тесты: 1
26.01.2017, 19:39 2
Почитай про jaxb, например
0
we2seek
80 / 80 / 42
Регистрация: 25.01.2010
Сообщений: 385
27.01.2017, 03:45 3
App.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package com.we2seek.cyberforum.xmldemo;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;
import java.util.*;
 
public class App {
    private static final String FOLDER = "src/com/we2seek/cyberforum/xmldemo/resources";
 
    // Map keys
    private static final String TO = "Кому";
    private static final String FROM = "От";
    private static final String HEADING = "Тема";
    private static final String BODY = "Сообщение";
 
    public static void main(String[] args) {
        //createNotes();
        List<Note> noteList = readNotes();
        Map<String, List<String>> grouped = groupByFields(noteList);
        grouped.entrySet().forEach(System.out::println);
        System.out.println(convertToString(grouped));
    }
 
    private static String convertToString(Map<String, List<String>> grouped) {
        StringBuilder sb = new StringBuilder();
        String newLine = System.getProperty("line.separator");
 
        sb.append(FROM).append(':').append(newLine);
        List<String> fromList = grouped.get(FROM);
        appendReverseList(sb, newLine, fromList);
 
        sb.append(TO).append(':').append(newLine);
        List<String> toList = grouped.get(TO);
        appendReverseList(sb, newLine, toList);
 
        sb.append(HEADING).append(':').append(newLine);
        List<String> headingList = grouped.get(HEADING);
        appendReverseList(sb, newLine, headingList);
 
        sb.append(BODY).append(':').append(newLine);
        List<String> bodyList = grouped.get(BODY);
        appendReverseList(sb, newLine, bodyList);
 
        return sb.toString();
    }
 
    private static void createNotes() {
        saveToFile(new Note.Builder()
                        .setFrom("Женя")
                        .setTo("Леша")
                        .setHeadind("Привет")
                        .setBody("Привет, друг!")
                        .build(),
                FOLDER, "note-1.xml");
 
        saveToFile(new Note.Builder()
                        .setFrom("Рита")
                        .setTo("Маша")
                        .setHeadind("Завтра")
                        .setBody("Не забудь принести подарок!")
                        .build(),
                FOLDER, "note-2.xml");
    }
 
    private static void appendReverseList(StringBuilder sb, String newLine, List<String> fromList) {
        ListIterator<String> iterator = fromList.listIterator(fromList.size());
        while (iterator.hasPrevious()) {
            sb.append(iterator.previous()).append(newLine);
        }
    }
 
    private static Map<String, List<String>> groupByFields(List<Note> noteList) {
        Map<String, List<String>> grouped = new HashMap<>(4);
        for (Note note : noteList) {
 
            List<String> fromList = grouped.get(FROM);
            if (fromList == null) {
                fromList = new ArrayList<>();
            }
            fromList.add(note.getFrom());
            grouped.put(FROM, fromList);
 
            List<String> toList = grouped.get(TO);
            if (toList == null) {
                toList = new ArrayList<>();
            }
            toList.add(note.getTo());
            grouped.put(TO, toList);
 
            List<String> headingList = grouped.get(HEADING);
            if (headingList == null) {
                headingList = new ArrayList<>();
            }
            headingList.add(note.getHeading());
            grouped.put(HEADING, headingList);
 
            List<String> bodyList = grouped.get(BODY);
            if (bodyList == null) {
                bodyList = new ArrayList<>();
            }
            bodyList.add(note.getBody());
            grouped.put(BODY, bodyList);
        }
 
        return grouped;
    }
 
    private static List<Note> readNotes() {
        List<String> filesInDirectory = findFilesInDirectory(FOLDER);
        List<Note> notes = new ArrayList<>();
        for (String fileName : filesInDirectory) {
            Note note = readFile(fileName);
            if (note != null) {
                notes.add(note);
            }
        }
 
        return notes;
    }
 
    private static void saveToFile(Note note, String folder, String filename) {
        try {
            File file = new File(folder, filename);
            JAXBContext jaxbContext = JAXBContext.newInstance(Note.class);
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.marshal(note, file);
        } catch (JAXBException e) {
            System.err.println(e);
        }
    }
 
    private static Note readFile(String filename) {
        Note result = null;
 
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(Note.class);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
 
            result = (Note) unmarshaller.unmarshal(new File(filename));
        } catch (JAXBException e) {
            System.err.println(e);
        }
 
        return result;
    }
 
    private static List<String> findFilesInDirectory(String directory) {
        List<String> result = new ArrayList<>();
 
        File folder = new File(directory);
        File[] files = folder.listFiles();
 
        if (files == null) {
            return result;
        }
 
        for (File file : files) {
            String fileName = file.getAbsolutePath();
            if (fileName.endsWith(".xml")) {
                result.add(fileName);
            }
        }
 
        return result;
    }
}


Note.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.we2seek.cyberforum.xmldemo;
 
import javax.xml.bind.annotation.*;
 
@XmlRootElement
@XmlType( propOrder={ "to", "from", "heading", "body" } )
@XmlAccessorType(XmlAccessType.FIELD)
public class Note {
    @XmlElement
    private String from;
    @XmlElement
    private String to;
    @XmlElement
    private String heading;
    @XmlElement
    private String body;
 
    public String getFrom() {
        return from;
    }
 
    public void setFrom(String from) {
        this.from = from;
    }
 
    public String getTo() {
        return to;
    }
 
    public void setTo(String to) {
        this.to = to;
    }
 
    public String getHeading() {
        return heading;
    }
 
    public void setHeading(String heading) {
        this.heading = heading;
    }
 
    public String getBody() {
        return body;
    }
 
    public void setBody(String body) {
        this.body = body;
    }
 
    @Override
    public String toString() {
        return "Note{" +
                "from='" + from + '\'' +
                ", to='" + to + '\'' +
                ", heading='" + heading + '\'' +
                ", body='" + body + '\'' +
                '}';
    }
 
    public static class Builder {
        private Note instance;
 
        public Builder(){
            this.instance = new Note();
        }
 
        public Builder setFrom(String from) {
            this.instance.from = from;
            return this;
        }
 
        public Builder setTo(String to){
            this.instance.to = to;
            return this;
        }
 
        public Builder setHeadind(String heading){
            this.instance.heading = heading;
            return this;
        }
 
        public Builder setBody(String body){
            this.instance.body = body;
            return this;
        }
 
        public Note build(){
            return this.instance;
        }
 
    }
 
}
0
HighPredator
5680 / 2002 / 720
Регистрация: 10.12.2010
Сообщений: 5,759
Записей в блоге: 3
27.01.2017, 11:32 4
we2seek, скажите, а зачем вы через инстанс все в билдере делаете?
0
we2seek
80 / 80 / 42
Регистрация: 25.01.2010
Сообщений: 385
28.01.2017, 00:34 5
HighPredator, Привычка
1
28.01.2017, 00:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2017, 00:34

Чтение XML в Java
Здравствуйте!!! У меня есть xml документ,как можно его прочитать и сохранить...

Java и xml файлы
Драсти, форумчане. Подскажите, есть ли способы считывания xml файла кроме DOM...

Xml Java Unmarshalling
Доброго времени суток. сижу уже битый 3 час с этой штукой. все вроде норм,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru