2015-01-06 4 views
2

Я хочу использовать HTML-блок для JAVA. Во всех примерах будет читаться HTML-код с определенного сайта.HTML-блок - читается из обычной строки?

Но я хочу прочитать источник HTML из другой строки.

Как это:

String myString = "<html> myString and Content </html>"; 
HtmlPage page = myString; // doesn´t work, how can I do something like this? 

Я вижу только примеры, как это:

final WebClient webClient = new WebClient(); 
    final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); 

Могу ли я прочитать только таблицу? Как это:

String myTable = "<table><td></td></table>"; 
HtmlTable table = myTable; // doesn´t work, how can I do something like this? 

Мой вопрос теперь, как я могу преобразовать это правильно? Может кто-нибудь мне помочь, пожалуйста.

ответ

2

HtmlUnit на самом деле не предназначен для этого случая использования, поэтому всегда будет немного хлопот, чтобы заставить его работать. Если вы специально не привязаны к HtmlUnit, вам может быть полезно использовать что-то вроде jsoup, которое имеет лучшую встроенную поддержку для разбора HTML-кода из строк.

Это, если вы привязаны к HtmlUnit, можно выполнить эту работу. Для вдохновения вы можете посмотреть, как HtmlUnit устанавливает объекты HtmlPage in its own test suite.

Как вы можете видеть там, хотя нет возможности построить HtmlPage непосредственно из String, вы можете сделать MockWebConnection, который даст консервированный ответ без привлечения сети. Так что ваш код не может выглядеть примерно так:

String html = "<html>Your html here</html>"; 
WebClient client = new WebClient(); 
MockWebConnection connection = new MockWebConnection(); 
connection.setDefaultResponse(html); 
client.setWebConnection(connection); 
HtmlPage page = client.getPage(someUrl); 

(Извиняюсь за любые ошибки в выше - я больше не на проекте Java, так что я не имеют удобный способ проверить это прямо сейчас Тем не менее, я потратил некоторое время на большой проект Java, который использовал этот метод для многих тестов. Он работал достаточно хорошо, но при обновлении HtmlUnit он был немного хрупким. В целом, мы были счастливее, когда мы переехал в Jsoup.)

+0

Что такое HtmlPage page = client.getPage (someUrl); -> someUrl в этом случае? – internet

+0

Я не уверен, но я думаю, вы можете дать ему буквально любой URL-адрес, и он все равно предоставит вам страницу, которую вы создали. Поэтому, я думаю, вы могли бы использовать «http://example.com». –

+1

DId эта работа для вас? Если нет, у меня есть другое решение – Arya

2

Вот еще один способ сделать это, как у Collum's, но немного отличается.

WebClient webClient = new WebClient(); 
    URL url = new URL("http://example.com"); 
    WebRequest requestSettings = new WebRequest(url, HttpMethod.GET); 

    StringWebResponse response = new StringWebResponse("<html> myString and Content </html>", url); 

    HtmlPage page = HTMLParser.parseHtml(response, webClient.getCurrentWindow()); 

Что касается получения стола, это возможно. Вы можете загрузить его вышеописанным методом и извлечь его с помощью кода ниже.

HtmlTable table = page.getHtmlElementById("table1"); 

вы можете перебрать и клетки с кодом ниже

for (final HtmlTableRow row : table.getRows()) { 
    System.out.println("Found row"); 
    for (final HtmlTableCell cell : row.getCells()) { 
     System.out.println(" Found cell: " + cell.asText()); 
    } 
} 

и вы можете получить доступ к конкретным клеткам на примере ниже

System.out.println("Cell (1,2)=" + table.getCellAt(1,2)); 

Пожалуйста, комментарий, если вы застряли и я могу быть в состоянии помочь

+0

Спасибо! Но что такое webClient в этом случае? Он реализуется в этом коде здесь: HtmlPage page = HTMLParser.parseHtml (response, webClient.getCurrentWindow()); Я использовал: WebClient webClient = new WebClient(); но я получил исключение: вызвано: java.lang.ClassNotFoundException: org.w3c.css.sac.ErrorHandler – internet

+0

@internet Я сделал проект на Eclipse с именем Test и попробовал это в основном методе. Я вставил весь код, включая импорт на pastebin. Вот ссылка http://pastebin.com/0QwFY5KW, дайте мне знать, если вы все еще не можете заставить ее работать. – Arya

+0

Странно, я проверил ваш код. Но код не работает :(Я получил здесь исключение: WebClient webClient = new WebClient(); Это полное исключение: Исключение в потоке «main» java.lang.NoClassDefFoundError: org/w3c/css/sac/ErrorHandler \t в test.HTMLUnitTest.main (HTMLUnitTest.java:18) Вызванный: java.lang.ClassNotFoundException: org.w3c.css.sac.ErrorHandler – internet

Смежные вопросы