1

我有 html 文件。我正在尝试在两个锚点之间提取“表格”内容。

这是示例 html 内容:

<HTML>
<HEAD>
<TITLE>
Test Doc
</TITLE>
</HEAD>
<BODY LINK=#000000 VLINK=#000000 ALINK=#990000>

<A NAME = "linkTab0000"></A>
<TABLE CELLPADING=1 BORDER=2 WIDTH=100%>
<TR>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#a6caf0>
<B><FONT SIZE=3 COLOR=#000000 FACE='HP Simplified'>Test Entity</FONT></B></TD>
</TR>
</TABLE><TABLE CELLPADING=2 BORDER=2 WIDTH=100%>
<TR>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Name</FONT></B></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Datatype</FONT></B></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Definition</FONT></B></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Note</FONT></B></TD>
</TR>
<TR>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>test</FONT></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>test</FONT></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>test</FONT></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>&nbsp</FONT></TD>
</TR>
</TABLE>

<A NAME = "linkTab0001"></A>
<TABLE CELLPADING=1 BORDER=2 WIDTH=100%>
<TR>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#a6caf0>
<B><FONT SIZE=3 COLOR=#000000 FACE='HP Simplified'>Test Entity</FONT></B></TD>
</TR>
</TABLE><TABLE CELLPADING=2 BORDER=2 WIDTH=100%>
<TR>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Name</FONT></B></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Datatype</FONT></B></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Definition</FONT></B></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#64b1ff WIDTH=200>
<B><FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>Note</FONT></B></TD>
</TR>
<TR>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>test</FONT></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>CHAR(18)</FONT></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>test</FONT></TD>
<TD ALIGN=LEFT VALIGN=TOP BGCOLOR=#ffffff>
<FONT SIZE=2 COLOR=#000000 FACE='HP Simplified'>&nbsp</FONT></TD>
</TR>
</TABLE>

我想提取“”元素之间的“TABLE”<A NAME = "linkTAB.....元素。

下面是我正在使用的代码:

     Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

     System.out.println(doc.html());

     String inputStr = doc.html();
     String link = "<a name = "+"linkTab";
     Pattern p = Pattern.compile("(\\b^"+link+"\\b)(.*?)(\\^"+link+"\\b)");
     Matcher m = p.matcher(inputStr);
     List<String> matches = new ArrayList<String>();
     while (m.find()) {
         matches.add(m.group());
     }

我也尝试过使用 bufferedreader 但它忽略了 String link = "

请让我知道任何建议。

谢谢

4

1 回答 1

1

正则表达式不是解析 XML 文件的好方法。

您最好使用 XPath 或 Inbuild 类 CSS 选择器。

这就是我为您的问题解决的方法:

public static void main(String[] args) throws IOException {
    // Read your html into a string
    StringWriter writer = new StringWriter();
    IOUtils.copy(Main.class.getResourceAsStream("/so18644171/html.html"), writer);
    String theString = writer.toString();

    Document doc = Jsoup.parse(theString);

    // a[name^=linkTab] means: 
    // all a's having a attribute name, starting with "linkTab"
    Elements linkTabs = doc.select("a[name^=linkTab] + table");

    // "a[name^=linkTab] + table means: All tables followed by a[...]

    System.out.println(linkTabs);
}

这打印:

<table cellpading="1" border="2" width="100%"> 
 <tbody>
  <tr> 
   <td align="LEFT" valign="TOP" bgcolor="#a6caf0"> <b><font size="3" color="#000000" face="HP Simplified">Test Entity</font></b></td> 
  </tr> 
 </tbody>
</table>
<table cellpading="1" border="2" width="100%"> 
 <tbody>
  <tr> 
   <td align="LEFT" valign="TOP" bgcolor="#a6caf0"> <b><font size="3" color="#000000" face="HP Simplified">Test Entity</font></b></td> 
  </tr> 
 </tbody>
</table>

我已将此示例上传到:

https://github.com/d0x/questions/blob/master/stackoverflowPlayground/src/main/java/so18644171/Main.java

于 2013-09-05T20:56:49.090 回答