2013-02-08 1 views
0

У меня есть уродливые HTML, который по электронной почте к моей программе, которая выглядит как:Извлечение текста в теле, которое не является частью тега HTML :: TreeBuilder

<html> 
    <head> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
    </head> 
    <body> 
     Saved search results.<br> 
    <br> 
    Name: 'Some splunk search' <br> 
    Query Terms: 'tag=foo NOT BAR=\&quot;Boom\&quot;' <br> 
    Link to results: <a href="https://foo/search/blahblahblah"> 
    https://foo/search/blahblahblah</a> 
    <br> 
    <br> 
    <table border="1"> 

... пропущено остальное для краткости.

Я могу вытащить элементы таблицы с помощью HTML :: TreeBuilder, но не могу понять, как вытащить «Имя:» «Условия запроса» сверху, не прибегая к другим средствам.

A $ корне-> дамп выше выглядит следующим образом:

<html> @0 
    <head> @0.0 
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> @0.0.0 
    <body> @0.1 
    <p> @0.1.0 (IMPLICIT) 
    " Saved search results. " 
    <br /> @0.1.0.1 
    <br /> @0.1.0.2 
    " Name: 'Some splunk search' " 
    <br /> @0.1.0.4 
    " Query Terms: 'tag=foo NOT BAR=\"Boom\"" 

Так есть ли способ, чтобы получить голый текст между @ 0.1.0.2 и 0.1.0.4 @

Спасибо! Todd

ответ

0

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

my $body_text = $body->as_text(skip_dels => 1); 

my ($name) = ($body_text =~ m#Name: '([^']+)'#s); 
my ($query_terms) = ($body_text =~ m#Query Terms: '([^']+)'#s); 
+0

Да ... Это то, что я сделал в настоящее время, но это не так. Похоже, должен быть способ вырвать эти линии. Свалка даже пропускает номер для них. (0.1.0.2, текст, затем 0.1.0.4) Спасибо за ответ, хотя ... – Todd