Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 14:02 Der er 16 kommentarer og
1 løsning

XML parsing fra http

Hej ... jeg er ved at prøve at bruge en DOM parser til XML.

Jeg kan sagtens få den til at læse en lokal fil, og hive det data ud jeg gerne vil have. Men jeg kan ikke få den til at hente det fra nettet af.

Jeg kan udskrive filen der ligger på nettet, men ikke hente de specifikke data ud via DomParseren

URL url = new URL("http://www.ekstrabladet.dk/seneste10.rss");

sådan henter jeg URL'en ?

DomParseren er den der er beskrevet her: http://www.eksperten.dk/artikler/100

Det er meningen jeg vil kunne hente RSS-data ned og så skal jeg have lavet en URL-handler så jeg kan bruge det derfra.
Avatar billede arne_v Ekspert
15. februar 2006 - 14:15 #1
url.openStream() giver giver dig en InputStream

der er en DocumentBuilder parse som virker paa en InputStream

NB: muligvis kan du ogsaa bare angive en string med URL til parse !!!!
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 14:22 #2
det er det samme som hvis jeg giver den url'en direkte i domparseren fordi den ikke kan finde filen siger den ... da den jo prøver at finde den i en lokal mappe.

jeg vil lige kigge på url.openstream()
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 14:27 #3
java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
    at RSSReader.ParseW3CDOM.main(ParseW3CDOM.java:37)
Exception in thread "main" java.lang.IllegalArgumentException: InputStream cannot be null
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at RSSReader.ParseW3CDOM.main(ParseW3CDOM.java:50)
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 14:27 #4
lidt underligt syntes jeg ... det sidste med InputStream cannot be null forstår jeg ... men ikke hvorfor den ikke vil connecte
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 14:28 #5
hmm... kan være det er proxyen her hvor jeg sidder ?
Avatar billede arne_v Ekspert
15. februar 2006 - 14:30 #6
java.net.ConnectException: Connection refused: connect

= problem

ja du skal maaske angive proxy server !
Avatar billede arne_v Ekspert
15. februar 2006 - 14:33 #7
Avatar billede arne_v Ekspert
15. februar 2006 - 14:36 #8
System.setProperty("proxySet", "true");
System.setProperty("http.proxyHost", "proxy.xxxx.dk");
System.setProperty("http.proxyPort", "8888");
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 14:40 #9
Nice ... det var "bare" det der skulle til...

package RSSReader;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.net.*;



public class ParseW3CDOM {

    //URL url = new URL("http://www.webcafe.dk/debat/java.rss");
   
//    private final static String XML_FILE = "C:\\seneste10.xml";
   
    public static void main(String[] args) throws MalformedURLException {
        System.setProperty("proxySet", "true");
        System.setProperty("http.proxyHost", "ISAPROXY.hih.dk");
        System.setProperty("http.proxyPort", "8080");
       
        URL URL_FILE = new URL("http://www.ekstrabladet.dk/seneste10.rss");
       
        InputStream XML_FILE = null;
        try {
            XML_FILE = URL_FILE.openStream();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {

            // læs fra fil til DOM træ

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

            DocumentBuilder db = dbf.newDocumentBuilder();

            Document doc = db.parse(XML_FILE);//new File(XML_FILE));

            // lav liste over alle elementer af typen 'item'

            NodeList elements = doc.getElementsByTagName("item");

            for (int i = 0; i < elements.getLength(); i++) {

                Node element = (Element) elements.item(i);

                // find attributten item

                String item = ((Element) element).getAttribute("item");

                String title = "";
               
                String description = "";

                String link = "";
               
                String date = "";
               
                String creator = "";

                // lav liste over alle childs og find title, description, link, date og creator

                NodeList subelements = element.getChildNodes();

                for (int j = 0; j < subelements.getLength(); j++) {

                    String tag = subelements.item(j).getNodeName();
                   
                    if (tag.equals("dc:date")) {

                        date = subelements.item(j).getFirstChild().getNodeValue();

                    }
                    if (tag.equals("dc:creator")) {

                        creator = subelements.item(j).getFirstChild().getNodeValue();

                    }
                   
                    if (tag.equals("title")) {

                        title = subelements.item(j).getFirstChild().getNodeValue();

                    }                 
                   
                    if (tag.equals("description")) {

                        description = subelements.item(j).getFirstChild().getNodeValue();

                    }

                    if (tag.equals("link")) {

                        link = subelements.item(j).getFirstChild().getNodeValue();

                    }

                }

                System.out.println("item=" + item);

                System.out.println("title=" + title);

                System.out.println("description=" + description);
               
                System.out.println("link=" + link);
               
                System.out.println("date=" + date);
               
                System.out.println("creator=" + creator);

            }

        } catch (FactoryConfigurationError e) {

            e.printStackTrace();

        } catch (ParserConfigurationException e) {

            e.printStackTrace();

        } catch (SAXException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return;

    }

}
Avatar billede arne_v Ekspert
15. februar 2006 - 14:43 #10
svar
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 15:14 #11
Tak for hjælpen utrolig simpel lille løsning.
Avatar billede arne_v Ekspert
15. februar 2006 - 15:23 #12
Java er ret "netvaerks orienteret" og derfor er den slags ikke saa svaert
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 21:45 #13
Nej det har jeg fundet ud af. Java er et dejligt sprog når man lige finder ud af finesserne. Der er jo mange ting der går igen fra c++, men man kan også sagtens komme til at sidde med et irriterende problem, som har en meget simpel løsning. Eller en kompleks løsning, fx seriel kommunikation på windows platformen. Det nye JavaComm api understøtter jo ikke windows, og jeg har ikke helt fundet ud af det gamle.
Avatar billede arne_v Ekspert
15. februar 2006 - 21:56 #14
Java er ikke saa godt til hardware og platform specifikke ting.

Nogen har fortalt mig at Solaris versionen af Java COMM ogsaa indeholder windows.

Jeg ved ikke om det passer.
Avatar billede ferrari_brian Nybegynder
15. februar 2006 - 22:09 #15
okai ... den gamle version 2 har ... men ved ikke med 3'eren de skriver at den ikke understøttes
Avatar billede arne_v Ekspert
16. februar 2006 - 04:23 #16
som jeg fik forklaret det saa havbde den gamle version en solaris version og
en windows version mens den nye kun har en solaris version men henter man den saa
indeholder den faktisk windows ogsaa

men det er kun et rygte
Avatar billede ferrari_brian Nybegynder
16. februar 2006 - 09:09 #17
ok... det kan være jeg kigger på det. Dog er jeg ved at se på en c++ løsning lige nu, hvor de hardware-nære ting er lidt mere lige til.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester