# XML vom Server zum Client



## Generic1 (9. Aug 2010)

Hallo,

ich habe in meinem Dynamic Web Project eine XML am Server und möchte diese nun zum Client senden, der diese dann anzeigt, der Client ist ein Flex- oder eine JS- Client.
Nun war ich der Meinung, dass ich am Server die XML- Datei einfach einlese und diese dann per PrintWriter zum Client sende, so in der Art:


```
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        final PrintWriter writer=response.getWriter();
         writer.println("<?xml version=\"1.0\"?>\n");
        writer.println("<salesdata>");
        writer.println("<item type=\"CDs\">");
        writer.println("<profit>");
        }
```

Nun bin ich aber draufgekommen, dass wenn ich die XML- Datei einlese, ich nur die offenen Tags bekomme und nicht die geschlossenen, um dann die ganze XML- Datei in eine StringBuffer zu speichern und diesen dann dem Client zu schicken.
Weiß jemand eine Möglichkeit, wie ich eine XML- Datei "ganz" einlesen kann, um diese dann dem Client zu senden?
lg


----------



## mvitz (9. Aug 2010)

Wie liest du diese denn zur Zeit aus?


----------



## Generic1 (9. Aug 2010)

So bilde ich den StringBuffer bzw gebs auf der Console aus:


```
private StringBuffer writeDoc(final Node node) {
        final StringBuffer parentXMLContent = new StringBuffer();
        short type = node.getNodeType();
        switch (type) {
            case Node.ELEMENT_NODE:
                String name = "<" + node.getNodeName();
                NamedNodeMap attrs = node.getAttributes();
                if (attrs != null) {
                    int length = attrs.getLength();
                    for (int i = 0; i < length; i++) {
                        Node attr =  attrs.item(i);
                        name += " " + attr.getNodeName();
                        name += "=\"" + attr.getNodeValue() + "\"";
                        }
                    }
                name += ">";
               // parentXMLContent.append(name);
                System.out.println(name);

                NodeList children = node.getChildNodes();
                if (children != null) {
                    int length = children.getLength();
                    for (int i = 0; i < length; i++) {
                        final StringBuffer childXMLContent = writeDoc(children.item(i));
                        parentXMLContent.append(childXMLContent);
                        }
                    }
                break;
            }
        return parentXMLContent;
        }
```


----------



## Noctarius (9. Aug 2010)

```
File file = new File("...");
byte[] data = new byte[(int) file.length());
InputStream is = new FileInputStream(file);
is.read(data);
out.write(data);
```

Irgendwie so...


----------



## SlaterB (9. Aug 2010)

was ist denn die Frage?
wenn das XML am Server als Textdatei vorliegt, dann lies sie mit FileReader ein,

oder wenn du du die Nodes durchlaufen willst, was funktioniert an dem geposteten Code nicht?
hast du da beim  System.out.println() schon Probleme oder erst woanders?
wenn du in Zeile 18 den öffnenden Tag hast und danach die Children, dann muss in Zeile 28 vielleicht der schließende Tag?

suchst du fertiges a la
XML Document Writer : WriterXMLJava
?


----------

