Как искать в HTML-файле некоторые теги? - PullRequest
3 голосов
/ 23 марта 2009

У меня небольшая проблема в Java. Как это сделать: я хочу найти в файле HTML теги href и src, а затем получить URL-адрес, связанный с этими тегами.

Какой лучший способ сделать это?

Спасибо за помощь. С наилучшими пожеланиями.

Ответы [ 7 ]

2 голосов
/ 23 марта 2009

Вы хотите сделать это как разовое задание на редактирование, или вам нужна систематическая (то есть код) реализация? Во втором случае найдите реализацию синтаксического анализатора Java HTML и обойдите дерево DOM.

http://java -source.net / с открытым исходным кодом / HTML-парсеры

1 голос
/ 23 марта 2009

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

Если вы находитесь в среде Java Swing, обязательно используйте методы в пакетах javax.swing.text.html и javax.swing.text.html.parser. К сожалению, они в основном предназначены для использования на JEditorPane, но я все равно настоятельно рекомендую вам взглянуть на них.

В Java 6 API есть класс HTML.Tag, который идентифицирует начальный и конечный теги HTML, которые затем можно использовать для определения ссылок, по которым вы хотите, чтобы ваша программа следовала. http://java.sun.com/javase/6/docs/api/javax/swing/text/html/HTML.Tag.html

Когда я написал программу, очень похожую на эту, я использовал 3 основных метода:

public void handleStartTag(HTML.Tag t, MUtableAttributeSet atts, int pos)
public void handleEndTag(HTML.Tag t, int pos)
public void handleText(char[] text, int pos)

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

Чтобы следовать URL, я советую вам использовать объект JEditorPane. Интерфейс javax.swing.event.HyperlinkListener определяет только один метод - hyperlinkUpdate (HyperlinkEvent e), в который можно передать URL-адрес, а затем вызвать .setPage (evt.getURL ()) для вашего объекта JEditorPane. Это обновит панель новой страницей и позволит вам начать процесс заново.

Сообщите мне, если у вас есть какие-либо проблемы, и, пожалуйста, проголосуйте за этот ответ!

0 голосов
/ 23 марта 2009

Я успешно использовал Neko HTML Parser для такого рода вещей (очистка экрана).

import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Node;

public class TestParser {

     public static void main(String[] argv) throws Exception {
          DOMParser parser = new DOMParser();
          for (int i = 0; i 
0 голосов
/ 23 марта 2009

Я бы посмотрел на tagsoup , который будет строить дерево DOM из любого HTML-документа, даже самого несовместимого.

Затем используйте XPath и переберите NodeList, возвращаемый:

// а

и

// IMG

0 голосов
/ 23 марта 2009

Вы можете использовать Rhino , а затем загрузить HTML-файл. После загрузки вы можете использовать getElementBy, чтобы перейти на любой узел или получить значение.

0 голосов
/ 23 марта 2009
0 голосов
/ 23 марта 2009

Если ваш файл является xhtml документом , то это стандартный документ xml и лучший способ его анализа - jdom . JDom очень мощный и простой в использовании и понимании.

Если у вас есть HTML-документ, вы можете попробовать htmlparser , в частности класс LinkTag .

...