Как разобрать Html и получить результат в виде строки с помощью Java

Я хочу разобрать Html и получить результат в виде строки. Учитывая, что тело внешнего HTML-кода содержит другую строку Html, я хочу, чтобы этот внутренний HTML-код был выходной строкой.

Пример> Ввод HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head></head><body><p>&lt;!DOCTYPE html&gt;<br />&lt;html&gt;<br />&lt;body&gt;<br /><br />&lt;h1&gt;My First Heading&lt;/h1&gt;<br /><br />&lt;p&gt;My first paragraph.&lt;/p&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br /></p></body></html>

Выходная строка:

<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>

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

Также выходная строка должна быть такой же, как при запуске первой строки здесь (http://www.w3schools.com/html/tryit.asp?filename=tryhtml_basic)

Пожалуйста, помогите мне с этим.


person saurabh    schedule 25.03.2015    source источник
comment
Интересный вопрос.   -  person Tejus Prasad    schedule 25.03.2015


Ответы (1)


я бы пошел с некоторым регулярным выражением:

(<!DOCTYPE html>).*(<html>.*</html>).+

И взяв группу 1 и группу 2,

    tst = tst.replaceAll("<", "<").replaceAll(">",">");
    Pattern p = Pattern.compile("(<!DOCTYPE html>).*(<html>.*</html>).*</html>.*");
    Matcher m = p.matcher(tst);
    m.find();
    System.out.println(m.group(1) + m.group(2));

Пример запуска: http://rextester.com/JTOJ89529

person Vyncent    schedule 25.03.2015
comment
Я только что отредактировал свой вопрос. Теперь, если вы попробуете это первое утверждение здесь (w3schools.com/html/tryit.asp ?filename=tryhtml_basic_document), то вы получите что-то вроде второго утверждения. Мне нужно что-то подобное. На самом деле я использую редактор HTML, в котором, если я что-то ввожу, он возвращает HTML-представление для этого ввода при выполнении getText. Я хочу разобрать его и получить исходный контент. - person saurabh; 25.03.2015
comment
Просто замените char перед применением регулярного выражения: tst = tst.replaceAll(, ‹).replaceAll(,›); Я отредактировал ответ и пример в соответствии с ним. - person Vyncent; 25.03.2015