Как избежать лишних пустых строк при создании XML с помощью Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как избежать лишних пустых строк при создании XML с помощью Java?

Сообщение Anonymous »

В настоящее время я пытаюсь разработать код с использованием библиотек Java 9 и javax.xml (обе обязательны для моей задачи), который редактирует XML-файл, и у меня возникают некоторые странные проблемы с добавлением дочерних узлов.

Это XML-файл:
и я хочу отредактировать его и построить что-то вроде этого:

Код: Выделить всё



A name
Last Name
username


Теперь при первом запуске кода перед узлом добавляется одна пустая строка. При втором запуске появляется больше пустых строк:

Код: Выделить всё




name

lastname

username




name
lastname
username


Это XML-код, созданный после двухкратного запуска программы. Как вы можете видеть, он добавляет пустые строки перед узлами и между другими узлами, ровно n-1 пустых строк между узлами соответствует n раз, когда код был выполнен.

Интересно, каково содержимое этих узлов, прежде чем обновлять файл, я написал следующий код:

Код: Выделить всё

int i=0;
while (root.getChildNodes().item(i)!=null){
Node aux = root.getChildNodes().item(i);
System.out.println("Node text content: ".concat(aux.getTextContent()));
i++;
}
1-е исполнение:

Код: Выделить всё

Node text content:

Node text content: namelastnameusername
2-е исполнение:

Код: Выделить всё

Node text content:

Node text content:
name
lastname
username

Node text content:

Node text content: namelastnameusername
3-е исполнение

Код: Выделить всё

Node text content:

Node text content:

name

lastname

username

Node text content:

Node text content:
name
lastname
username

Node text content:

Node text content: namelastnameusername
Наконец, это код Java:

Код: Выделить всё

private static void saveUser(String firstName, String lastName, String username){
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File(databaseFile));
Element root = doc.getDocumentElement();
root.normalize();

// build user node
Element userNode = doc.createElement("user");
Element nameNode =  doc.createElement("name");
Element lastNameNode = doc.createElement("last-name");
Element usernameNode = doc.createElement("username");

//build structure
nameNode.appendChild(doc.createTextNode(firstName));
lastNameNode.appendChild(doc.createTextNode(lastName));
usernameNode.appendChild(doc.createTextNode(username));

userNode.appendChild(nameNode);
userNode.appendChild(lastNameNode);
userNode.appendChild(usernameNode);
root.appendChild(userNode);

//write the updated document to file or console
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(databaseFile));
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
}catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
e1.printStackTrace();
}
}
Единственное решение, которое я смог найти, — это удалить пустые строки после генерации XML, но я думаю, что это неправильное решение, и мне хотелось бы сначала найти альтернативы.

Есть какие-нибудь предложения по решению этой проблемы?>

Подробнее здесь: https://stackoverflow.com/questions/584 ... -with-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»