0
A
回答
2
你可以使用常見的文件擴展名列表,可以洞察到存儲在一個給定的URL數據的類型,但通常不會是非常可靠的,尤其是Web 2.0網站(只是看的URL這個問題本身)。另外,PHP腳本(.php)或其他動態內容站點的鏈接可以返回HTML或XML。或者它可能完全返回其他內容,例如JPG文件。
簡單地通過查看文件的開頭,有許多簡單的啓發式方法可用於檢測HTML和XML。例如,您可以查找<!DOCTYPE ...>
聲明,檢查<?xml ...?>
指令,然後檢查文件是否包含根<html>
標記。當然,這些都應該是不區分大小寫的檢查。
您也可以嘗試識別文件的基礎上,其類型MIME type(例如,text/html的或文本/ XML)。不幸的是,許多服務器返回不正確或無效的MIME類型,因此您通常必須閱讀文件的開頭部分才能發現其內容,正如您可以在下面的getMimeType()方法的前兩個不足版本中看到的那樣。第三次嘗試效果更好,但第三方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);
}
}
1
我不能肯定,如果你的鏈接是某種Link
的對象,但只要你可以作爲一個字符串訪問值這應該工作,我認爲。
List<String> xmlLinks = new ArrayList<String>();
for (String link : list) {
if (link.endsWith(".xml") || link.contains(".xml")) {
xmlLinks.add(link);
}
}
相關問題
- 1. 在concordion中,如何鏈接Java和HTML?
- 2. 區分HTML鏈接和圖像鏈接,如Facebook附着在.NET
- 3. 如何區分selenium webdriver中的圖像鏈接和href鏈接?
- 4. 如何在Compojure/Ring中區分html和xhr/xml/json請求?
- 5. 如何鏈接HTML部分?
- 6. 如何區分jquery中的鏈接?
- 7. 如何結合equals方法在Java和HTML鏈接在JSP
- 8. java - 如何使xml成爲超鏈接?
- 9. c#和regEx在html頁面上拉鍊接href部分鏈接
- 10. 區分圖像的鏈接和直接鏈接
- 11. xml鏈接到HTML div
- 12. java和xml文件沒有鏈接
- 13. 如何區分CDA和XML文件?
- 14. 在HTML文件中鏈接XML和XSLT文件
- 15. 如何在C#XML註釋中鏈接/分組重載?
- 16. 兩個不同的HTML超鏈接之間的區別? (鏈接和HTML標籤)
- 17. 如何在.html()中添加鏈接
- 18. 如何在Dart中創建HTML鏈接?
- 19. 如何在NSString中製作html鏈接?
- 20. 如何在html中引用超鏈接?
- 21. XML Driven Skitter中的HTML鏈接
- 22. 如何區分常規文件和符號鏈接?
- 23. HTML和PHP生成分頁鏈接
- 24. 區分點擊鏈接?
- 25. 帶有鏈接的分區
- 26. 如何在HTML鏈接中建立鏈接
- 27. 如何鏈接HTML和PHP程序
- 28. 如何使xml架構與JTable相關(鏈接),xml java?
- 29. 在Java中,如何區分實現相同接口的類?
- 30. HTML和PHP鏈接
看看它是否以「.xml」結尾? – 2012-04-10 02:59:54
多一點說明會有幫助。 – kentcdodds 2012-04-10 04:37:35
你能從鏈接列表中發佈一些例子嗎? – bmkorkut 2012-04-10 07:57:20