2014-02-11 13 views
0

我想从html文件生成xPath。到目前为止,我一直在succeded保存HTML源代码在一个字符串,并使用匹配的正则表达式如下产生基本的XPath: -java:使用字符串匹配器生成xpath正则表达式

String text = "<html><body><table><tr id=\"x\"><td>abc</td><td></td><td>xyz</td></tr></table></body></html>"; 

//I want xpath till label "xyz" 
     String unwanted= "xyz"; 

//so splitting and storing needed String 
     String[] neededString=text.split(unwanted); 

     String a=""; 

//pattern for extracting tags 
     String patternString1 = "<(.+?)>"; 

     Pattern pattern = Pattern.compile(patternString1); 
     Matcher matcher = pattern.matcher(neededString[0]); 

     while(matcher.find()) { 

      a=a.concat(matcher.group(1)+"/"); 
     System.out.println(a); 

    } 

此代码适用于基本标签结构不一样的在<tr><td>多个子节点。任何人都可以提高我的上述代码,包括xpath生成多个孩子,也可以捕获像Ids,类等attrributes

任何帮助,非常感谢。 在此先感谢。

+0

到底为什么你认为使用正则表达式将帮助你在这里?使用正确的HTML解析器,用正则表达式做这件事是不可能的。 – Tomalak

回答

1

正则表达式对于提取Html内容并不是那么准确。

使用Jsoup HTML解析器

public static void main(String[] args){ 
     String html = "<html><body><table><tr id=\"x\"><td>abc</td><td></td>" + 
      "<td>xyz</td></tr></table></body></html>"; 

     Document doc = Jsoup.parse(html); 

     for (Element table : doc.select("table")) { 
      for (Element row : table.select("tr[id=x]")) { 
       Elements tds = row.select("td)"); 
       System.out.println(tds.get(2).text()); 
      } 
     } 

     } 
相关问题