Как прочитать HTM-файл внутри ZIP-файла? - PullRequest
1 голос
/ 16 января 2012

У меня есть zip-файл, который содержит Index.htm.Я должен прочитать содержимое Index.htm и найти внутри него дату ( декабрь 2011 ), создать каталог с этой датой и затем извлечь zip-файл внутри этого каталога.

thisтакое 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>

Ответы [ 3 ]

3 голосов
/ 16 января 2012

Попробуйте это,

  1. Используйте пакет java.util.zip , чтобы прочитать html
  2. Используйте некоторый html-парсер (я бы порекомендовал JSoup ), чтобы получить строку даты. Вот ссылка , которая поможет в вашем случае.

Получив строку с датой, создайте нужный вам каталог.

РЕДАКТИРОВАТЬ : удалить &nbsp; можно одним из следующих способов,

  • Создайте еще один элемент документа со строкой, содержащей &nbsp;, и выполните следующее

    document.select(":containsOwn(\u00a0)").remove(); (взято из здесь )

  • Использовать следующее (при условии, что ваша строка будет очищена htmlString)

    Jsoup.parse(htmlString).text();

  • Используйте функцию String replaceAll(), чтобы избавиться от &nbsp;.

2 голосов
/ 16 января 2012

Несколько шагов:

  1. Используйте пакет java.util.zip и создайте распакованный поток.
  2. Используйте синтаксический анализатор XML (например, JSoup) для обхода узлов и ...
  3. Используйте регулярное выражение или регулярное выражение с анализатором даты (например, SimpleDateFormat), чтобы выбрать дату.

Это предполагает, что искомая дата всегда находится в текстовом узле.

1 голос
/ 18 января 2012

Это правильный код конца, который я использовал: спасибо всем, предоставив полезные советы

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();
}
...