Создание XML-файла

Модератор: Absurd

Gugle
Сообщения: 22
Зарегистрирован: 17 май 2006, 18:18
Откуда: Москва
Контактная информация:

Если то же самый файл создавать обычным методом FileOutputStream out = new FileOutputStream(file); то все работает, а если с помощью DOM то нет. Ерунда какая то... в доках написано, что doc = builder.parse(file); - который открывает файл, считывает данные в doc и закрывает файл, а xformer.transform(source, result); - открывает файл, заливает дерево в файл и закрывает его тут же. Но кто же файл держит?
Можно как нибуть принудительно "закрыть" класс?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Меня терзает смутное чувство, что "кто-то ест слишком много мёда" (с)

Я-то думал, что нужно XML файл создать, а тут откуда ни возьмись появились сокеты, какие-то Explorer_ы и, как я догадался, всё это ещё и на сервере бежать должно ....

Больше всего мне нравится то, что понятие "отправить" ассоциируется с методом "GET" :-)

Значится так, я не знаю, как оно делается через сокеты и искать мне лень, но есть подозрение, что вышеописанное обращение через сокет - не правильное (у меня это чудо просто "висит" в ожидании in.read()).

Я написал следующий код, положил его в корень сервера (Linux SuSe 9.2 ++ java 1.5) и всё сработало "на ура".

[syntax:6f88f648f6="java"]import java.io.*;
import java.net.*;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

import org.w3c.dom.*;

public class XMLTest {

public static void main(String[] args) {
DocumentBuilder builder;
try {
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
return;
}
Document doc = builder.newDocument();

Element elem = doc.createElement("main");
elem.setAttributeNode(doc.createAttribute("name"));
elem.setAttribute("title", "hello");
doc.appendChild(elem);

Result result = new StreamResult("test.xml");
Source source = new DOMSource(doc);
Transformer xformer;
try {
xformer = TransformerFactory.newInstance().newTransformer();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
return;
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
return;
}
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
try {
xformer.transform(source, result);
} catch (TransformerException e) {
e.printStackTrace();
return;
}

System.out.println("create end");

NodeList list = doc.getChildNodes();

for(int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
System.out.println("Node: " + node.getNodeName());
NamedNodeMap map = node.getAttributes();
for(int j = 0; j < map.getLength(); j++) {
Node attribute = map.item(j);
System.out.println("\tattribute " + j + " : " + attribute.getNodeName() + " = " + attribute.getNodeValue());
}
}

System.out.println("read end");
File dir = new File("./");
String[] files = dir.list();
for(int i = 0; i < files.length; i++) {
System.out.println("0" + files + "0");
}

int i;
String otvet = "";

GetXML get = null;
InputStream in = null;
try {
get = new GetXML(new URL("http://www-old.pe.mw.tu-muenchen.de/test.xml"), "www-old.pe.mw.tu-muenchen.de", 80);
in = get.getInputStream();
while ((i = in.read()) != -1) {
otvet += String.valueOf((char)i);
}

System.out.println(otvet);
} catch (java.io.IOException e) {
System.out.println("Cannot connect to localhost: " + e.getMessage() + "\n");
} finally {
try {
if (in != null)
in.close();
if (get != null)
get.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}

static class GetXML extends sun.net.http://www.protocol.http.HttpURLConnection {
public GetXML(URL arg0, String arg1, int arg2) {
super(arg0, arg1, arg2);
}
}

}[/syntax:6f88f648f6]

После "read end" я добавил вывод всех файлов в текущей директории
и одна из строчек у меня выглядит, как "0test.xml0", и никаких восклицательных знаков.
(нули я добавил, чтобы проверить, не будет ли пробелов вокруг, на всякий случай).

Так вот, Gugle, если у тебя этот код заработает - начинай разбираться, как правильно обращаться с HTTP коннекшнами.
Я думаю, что с самим построением XML-файла это не связано.

P.S. при обращении я использовал полное имя сервера, поскольку по localhost мне выдавалось "Connection refused" (наверное сервер под локалхост не настроен).
mobius
Сообщения: 157
Зарегистрирован: 25 янв 2005, 18:42
Откуда: Минск
Контактная информация:

To Gugle: Я предполагаю, что у тебя проблема с путями где-то, т.есть ты пытаешься открыть файл там, где его нету просто или нет доступа туда.

Ты отправляешь файл через GET??? Ужос.... Как сказал Oscar - учи мат. часть.

P.S. Следующий раз попытайся полностью охарактеризовать твою проблему, что куда ложится, откуда берётся, и где это всё вертится, а то ты знаешь, если чесно, то после всего сумбура, что написан тобой выше я уже запутался что ты хочешь спросить....
Всё об отдыхе на http://chugaga.com
Ответить