2012-01-16 69 views
1

我有一个包含Index.htm的zip文件。我应该阅读Index.htm的内容并在其中找到一个日期(2011年12月),并创建一个包含此日期的目录,然后在该目录中提取zip文件。如何读取zip文件中的htm文件?

这是HTML文件:

<HTML>  
    <HEAD></HEAD>  
    <BODY>  
    <A Name="TopOfPage"></A>  
    <TABLE Width="100%" Border="0" CellPadding="0" CellSpacing="0">  
    <TR> 
    <TD Width="30%"><A HRef="HeaderTxt/HetBCFI.htm">Het B.C.F.I.</A></TD>  
    </TR>  
    </TABLE>  
    <TABLE Width="100%" Border="0" CellPadding="0" CellSpacing="0"> 
    <TR> 
    <TD RowSpan="2" Width="10"></TD> 
    <TD Width="70%"><STRONG><FONT Face="Arial" Size="2">Gecommentarieerd Geneesmiddelenrepertorium</FONT></STRONG></TD> 
    <TD Width="29%" Align="Right" Class= "Datum">&nbsp; 
    December 2011&nbsp;&nbsp; 
    </TD> 
    <TD Rowspan="2" Width="10"></TD> 
</TR> 
</TABLE> </BODY> </HTML> 

回答

1

这是我用正确的最终代码:感谢你提供有用的提示

public static String getDateWithinHtmlInsideZipFile(File archive) { 
     ZipFile zp = new ZipFile(archive); 
     InputStream in = zp.getInputStream (zp.getEntry ("Index.htm")); 

     Document doc = Jsoup.parse(in, "UTF-8", ""); 

    return doc.body().getElementsByClass("Datum").text().trim(); 
} 
2

几个步骤:

  1. 使用java.util.zip包并创建一个解压缩流。
  2. 使用XML解析器(如JSoup)来遍历节点,并...
  3. 使用正则表达式或带日期解析器(如SimpleDateFormat)的正则表达式来挑出日期。

这使得您正在查找的日期总是在文本节点中。

+0

额外的步骤1.5:ZipFile的ZP =新的ZipFile( “xxx.zip”); InputStream in = zp.getInputStream(zp.getEntry(“Index.htm”)); – 2012-01-16 15:21:31

+0

我得到这个结果: '  December 2011    ' 如何在我的字符串中省略 ? – michdraft 2012-01-18 12:03:29

3

试试这个,

  1. 使用java.util.zip包to read the html
  2. 使用某些HTML解析器(我会建议JSoup)来获取日期字符串。 Here is link这将有助于你的情况。

一旦你有日期字符串,创建你想要的目录。

编辑:要删除​​&nbsp;,您可以在以下情况之一,

  • 创建包含&nbsp;字符串另一文档元素并执行以下操作

    document.select(":containsOwn(\u00a0)").remove();(从here拍摄)

  • 以下使用(假设您要清理的字符串是htmlString

    Jsoup.parse(htmlString).text();

  • 使用字符串的replaceAll()功能摆脱&nbsp;

+0

当我解析htm文件时,我得到了  befor和我的字符串结束。 我该如何摆脱它? – michdraft 2012-01-18 12:04:38

+0

更新了我的答案,以解决您的疑虑。 – Santosh 2012-01-18 12:44:04

+0

'String date = doc.body()。getElementsByClass(“Datum”)。html()。toString()。replaceAll(“ ”,“”)。trim();' – michdraft 2012-01-18 14:14:35