答えて
あなたは指定されたURLに格納されたデータの種類を占うために、共通のファイル名の拡張子のリストを使用することができますが、それは多くの場合、特にWeb 2.0のサイトで、非常に信頼されません(だけのURLを見てくださいこれは質問自体です)。さらに、PHPスクリプト(.php)やその他の動的コンテンツサイトへのリンクは、HTMLまたはXMLのいずれかを返す可能性があります。あるいは、JPGファイルのように完全に何かを返すこともできます。
ファイルの先頭を見るだけで、HTMLとXMLを検出するための多くの簡単な発見的方法があります。たとえば、<!DOCTYPE ...>
宣言を探して、<?xml ...?>
ディレクティブを確認し、ファイルにルート<html>
タグが含まれているかどうかを確認します。もちろん、これらはすべて大文字小文字を区別しないチェックでなければなりません。
また、そのMIME type(例えば、text/htmlのまたはtext/xmlで)に基づいて、ファイルの種類を識別するために試すことができます。残念なことに、多くのサーバーでは不正または無効なMIMEタイプが返されるため、以下のgetMimeType()メソッドの最初の2つの不適切なバージョンで見られるように、ファイルの開始部分を読みとる必要があります。 3番目の試みはうまくいったが、サードパーティ製のMimeMagicライブラリは依然として残念な結果をもたらした。それにもかかわらず、前述の追加ヒューリスティックを使用して、getMimeType()メソッドを置き換えるか改善することができます。
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);
}
}
JavaであなたのリンクはLink
オブジェクトのいくつかの並べ替えている場合、私は確かではないんだけど、限り、あなたは文字列として値にアクセスすることができますので、これは私が考えて動作するはずです。
List<String> xmlLinks = new ArrayList<String>();
for (String link : list) {
if (link.endsWith(".xml") || link.contains(".xml")) {
xmlLinks.add(link);
}
}
- 1. Compojure/Ringでhtmlとxhr/xml/jsonのリクエストを区別する方法は?
- 2. selenium webdriverの画像リンクとhrefリンクを区別する方法は?
- 3. ajaxレスポンスとHTMLコードを区別する方法は?
- 4. タップとドラッグを区別する方法
- 5. マウスクリックとタッチタップを区別する方法
- 6. 色とチャートを区別する方法
- 7. Windowsとdllを区別する方法
- 8. アンドロイドスマートフォンとタブレットを区別する方法
- 9. ブランチとフィーチャブランチを区別する方法
- 10. 内部アクションとajaxリクエストのリンクを区別する最も良い方法は?
- 11. xmlのボタンをクラス内のJavaアクションにリンクする方法
- 12. ランダムカラムMYSQLと区別する方法は?
- 13. java ISO-8859-1とUTF-8をエンコードするファイルを区別する方法は?
- 14. Java配列、区別とソート
- 15. HTMLコードとJavaコードのリンク
- 16. HTML->リンクを使用して別のテーブルにリンクする方法
- 17. 別のマシンの静的なHTMLページにリンクする方法。
- 18. String.split() - タブ区切り値とコンマ区切り値を区別する方法は?
- 19. CSVファイルとの区別方法
- 20. RAISERROR - SqlExceptionとの区別方法
- 21. 関数aspとasaの区別方法
- 22. RAMアドレスとメモリマップアドレスの区別方法
- 23. プロトタイプテーブルビューセルの区別方法
- 24. 時間を区別する方法は?
- 25. カラースキームを区別する方法
- 26. エラーコードを区別する方法は?
- 27. バッチファイルを区別する方法
- 28. サブタイプを区別する方法は?
- 29. タイプを区別する方法:Int32 []&Int32 [*]?
- 30. あるXMLファイルを別のXMLファイルに表示する方法。別のXML
「.xml」で終わるかどうかを確認しますか? –
もう少し説明すれば助かります。 – kentcdodds
リンクのリストからいくつかの例を投稿できますか? – bmkorkut