Ich habe eine Liste von Links, die Links zu HTML-und XML-Seiten enthalten, wie kann ich die XML-Links aus der Liste extrahieren? in JavaWie unterscheidet man XML von HTML-Links in Java
dank
Ich habe eine Liste von Links, die Links zu HTML-und XML-Seiten enthalten, wie kann ich die XML-Links aus der Liste extrahieren? in JavaWie unterscheidet man XML von HTML-Links in Java
dank
Sie eine Liste der gemeinsamen Dateierweiterungen verwenden könnten die Art der Daten zu einem bestimmten URL gespeichert prophezeien, aber das wird oft nicht sehr zuverlässig sein, vor allem mit Web-2.0-Seiten (unter der URL schauen nur von diese SO Frage selbst). Darüber hinaus kann eine Verknüpfung zu einem PHP-Skript (.php) oder einer anderen Website mit dynamischen Inhalten entweder HTML oder XML zurückgeben. Oder es könnte etwas ganz anderes zurückgeben, beispielsweise eine JPG-Datei.
Es gibt viele einfache Heuristiken, die Sie für die Erkennung von HTML vs. XML verwenden können, indem Sie einfach auf den Anfang der Datei schauen. Beispielsweise können Sie nach der <!DOCTYPE ...>
-Deklaration suchen, nach der <?xml ...?>
-Direktive suchen und überprüfen, ob die Datei ein Stamm-<html>
-Tag enthält. Natürlich sollte es sich bei allen um Groß- und Kleinschreibung handeln.
Sie können auch die Art der Datei versuchen, auf der Grundlage seiner MIME type (zB text/html oder text/xml) zu identifizieren. Leider geben viele Server falsche oder ungültige MIME-Typen zurück, so dass Sie den Anfang der Datei oft lesen müssen, um den Inhalt zu verstehen, wie Sie in meinen ersten beiden unangemessenen Versionen einer getMimeType() - Methode sehen können. Der dritte Versuch funktionierte besser, aber die MimeMagic-Bibliothek von Drittanbietern lieferte immer noch enttäuschende Ergebnisse. Nichtsdestoweniger könnten Sie die oben erwähnten zusätzlichen Heuristiken verwenden, um die Methode getMimeType() entweder zu ersetzen oder zu verbessern.
package com.example.mimetype;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.FileNameMap;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jmimemagic.Magic;
import net.sf.jmimemagic.MagicException;
import net.sf.jmimemagic.MagicMatchNotFoundException;
import net.sf.jmimemagic.MagicParseException;
public class MimeUtils {
// After calling this method, you can retrieve a list of URLs for each mimetype.
public static Map<String, List<String>> sortLinksByMimeType(List<String> links) {
Map<String, List<String>> mapMimeTypesToLinks = new HashMap<String, List<String>>();
for (String url : links) {
try {
String mimetype = getMimeType(url);
System.out.println(url + " has mimetype " + mimetype);
// If this mimetype hasn't already been initialized, initialize it.
if (! mapMimeTypesToLinks.containsKey(mimetype)) {
mapMimeTypesToLinks.put(mimetype, new ArrayList<String>());
}
List<String> lst = mapMimeTypesToLinks.get(mimetype);
lst.add(url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return mapMimeTypesToLinks;
}
public static String getMimeType(String url) throws MalformedURLException, IOException, MagicParseException, MagicMatchNotFoundException, MagicException {
// first attempt at determining MIME type--returned null for all URLs that I tried
// FileNameMap filenameMap = URLConnection.getFileNameMap();
// return filenameMap.getContentTypeFor(url);
// second attempt at determining MIME type--worked better, but still returned null for many URLs
// URLConnection c = new URL(url).openConnection();
// InputStream in = c.getInputStream();
// String mimetype = URLConnection.guessContentTypeFromStream(in);
// in.close();
// return mimetype;
URLConnection c = new URL(url).openConnection();
BufferedInputStream in = new BufferedInputStream(c.getInputStream());
byte[] content = new byte[100];
in.read(content);
in.close();
return Magic.getMagicMatch(content, false).getMimeType();
}
public static void main(String[] args) {
List<String> links = new ArrayList<String>();
links.add("http://stackoverflow.com/questions/10082568/how-to-differentiate-xml-from-html-links-in-java");
links.add("http://stackoverflow.com");
links.add("http://stackoverflow.com/feeds");
links.add("http://amazon.com");
links.add("http://google.com");
sortLinksByMimeType(links);
}
}
Ich bin nicht sicher, ob Ihre Links eine Art Link
Objekt sind, aber solange Sie den Wert als String zugreifen kann dies sollte ich denke arbeiten.
List<String> xmlLinks = new ArrayList<String>();
for (String link : list) {
if (link.endsWith(".xml") || link.contains(".xml")) {
xmlLinks.add(link);
}
}
Sehen Sie, wenn es mit ".xml" endet? –
Ein wenig mehr Beschreibung wäre hilfreich. – kentcdodds
Können Sie ein Beispiel aus Ihrer Linkliste hochladen? – bmkorkut