XML - HTML

janus23

Mitglied
Hallo.
Folgenden Code hab ich mit Java erstellt.
Code:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>
<img alt="screenshot1.jpg" src="screenshot1.jpg"></p>
<p>
<img alt="screenshot2.jpg" src="screenshot2.jpg"></p>
</body>
</html>

Diese soll mit dem normalem XMLParser bearbeitet und erstellt werden, wie jedes andere XML File.
Jedoch kommt mir so vor, als ob Java erkennt das es html Code ist, und fügt zum Beispiel den Meta Tag gleich automatisch hinzu.
Kann man das irgendwie abstellen?
Und der typische XML Header in der .xml fehlt auch.
Außerdem würde mich intresieren, wie ich die img so wie normales HTML hinbekomme, also so ein Empty tag
HTML:
<img src=bla.. />
Hier hab ich keinen Endtag vom Parser bekomme, aber so nen endenden Backslash hab ich auch nicht.

Danke für die Hilfe^^
 
Aw: Xml - html

Hi janus,

welchen XML-Parser nutzt du denn, und hast du dich schon in dessen Dokumentation danach umgeschaut, wie du damit XHTML (das ist es ja, worauf du hinaus willst) erzeugen kannst?
In meinem aktuellen Projekt nutzen wir JDOM und erzeugen damit zwar keine XHTML, aber die leeren Tags mit abschließendem Backslash werden da ordentlich erstellt.

Grüße
Carron
 
Aw: Xml - html

Eigentlich brauch nicht wirklich XHTML Code, aber mit HTML kennn ich mich schon aus, deswegen hab ich das mal zum Üben für XML verwendet, weil das ja ähnlich^^
Was ich im Internet gefunden habe, ist ja auch normaler XML Syntax so wie das img da oben.
Als Parser verwende ich DOM.
 
Aw: Xml - html

Laut der DOM-Doku unterscheidet der zwischen HTML- und XML-Dokumenten. Vielleicht musst du ihm bewusst sagen, dass er XMLs erzeugen soll. Dass diese "zufällig" auch HTML-Dateien sind, kann dem Parser ja egal sein.

Wie sieht denn dein HTML erzeugender Code aus?
 
Aw: Xml - html

Java:
public class ImageXmlWriter {

    public ImageXmlWriter() throws ParserConfigurationException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        builder = factory.newDocumentBuilder();
       
    }

    public Document build() {
        doc = builder.newDocument();
        Element root = createImgXML();
        doc.appendChild(root);
        
        return doc;
    }

    private Element createImgXML() {
        Element html = doc.createElement("html");
        Element head = doc.createElement("head");
        html.appendChild(head);
        Element body = doc.createElement("body");
        body.appendChild(this.createParagraph(1));
        body.appendChild(this.createParagraph(2));
        html.appendChild(body);


        return html;
    }

    private Element createParagraph(int num) {
        
        Element p = doc.createElement("p");
        Element img = doc.createElement("img");
        img.setAttribute("alt", "screenshot" + num + ".jpg");
        img.setAttribute("src", System.getProperty("user.dir") + File.separator + "screenshot"+num+".jpg");

        p.appendChild(img);
        return p;
    }
    private DocumentBuilder builder;
    private Document doc;

    public static void main(String[] args) {
        try {
            ImageXmlWriter ixw = new ImageXmlWriter();
            Document doc = ixw.build();
            Transformer t = TransformerFactory.newInstance().newTransformer();
            t.transform(new DOMSource(doc), new StreamResult(new FileWriter(new File(System.getProperty("user.dir") + File.separator + "image.xml"))));
            t.transform(new DOMSource(doc), new StreamResult(System.out));
        } catch (Exception ex) {
            Logger.getLogger(ImageXmlWriter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Eigentlich wär mir das ja auch egal, aber wenn ich es nämlich auslesen, bekomm ich die Meldung:
Code:
[Fatal Error] image.xml:4:3: The element type "META" must be terminated by the matching end-tag "</META>".
12.06.2010 08:39:59 ImageExtractor main
SCHWERWIEGEND: null
org.xml.sax.SAXParseException: The element type "META" must be terminated by the matching end-tag "</META>".
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
        at ImageExtractor.parse(ImageExtractor.java:25)
        at ImageExtractor.main(ImageExtractor.java:43)

Das ist die Klasse dazu
Java:
public class ImageExtractor {

    public ImageExtractor() throws ParserConfigurationException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        factory.setIgnoringElementContentWhitespace(true);
        builder = factory.newDocumentBuilder();
    }

    public ArrayList parse(String fileName) throws SAXException, IOException {
        File f = new File(fileName);
        Document doc = builder.parse(f);
        Element root = doc.getDocumentElement();
        return getImgs(root);
    }

    private static ArrayList getImgs(Element e) {
        ArrayList img = new ArrayList();
        NodeList children = e.getElementsByTagName("p");
        for (int i = 0; i < children.getLength(); i++) {
            System.out.println(children.item(i).getNodeName());
        }
        return img;
    }

    public static void main(String[] args) {
        try {
            ImageExtractor ie = new ImageExtractor();
            String path = System.getProperty("user.dir") + File.separator + "image.xml";
            ie.parse(path);
        } catch (Exception ex) {
            Logger.getLogger(ImageExtractor.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


    private DocumentBuilder builder;
}

Die XML sieht übrigens so aus:
XML:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>
<img alt="screenshot1.jpg" src="screenshot1.jpg"></p>
<p>
<img alt="screenshot2.jpg" src="screenshot2.jpg"></p>
</body>
</html>
 
Zuletzt bearbeitet von einem Moderator:
Zurück