2014-02-11 3 views
0

Я хочу сгенерировать xPath из html-файла. До сих пор я преуспели хранить источник Html в строку и создания базового XPath, используя Сличитель регулярное выражение следующим образом: -java: generate xpath using string matcher regex

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); 

    } 

Этот код работает для базового тега структуры без нескольких дочерних узлов, как несколько <td> «s в <tr> , Может ли кто-нибудь улучшить мой код, чтобы включить генерацию xpath для нескольких дочерних элементов, а также для захвата атрибутов, таких как идентификаторы, класс и т. Д.

Любая помощь очень ценится. Спасибо заранее.

+0

Почему именно вы думаете, что с помощью регулярных выражений поможет вам здесь? Используйте правильный парсер HTML, делая это с помощью регулярного выражения невозможно. – Tomalak

ответ

1

Regex не так точен для извлечения содержимого Html.

Использование Jsoup Html Parser

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

     }