Это похоже на ToString, и метод пересинтаксического анализа является лучшим способом. Вот код:
XElement copy = XElement.Parse(original.ToString());
НЕ используйте регулярные выражения для синтаксического анализа HTML. Существует очень большое количество модулей CPAN, которые делают это за вас гораздо более эффективно.
Это простой:
my $html = '<tr class="Highlight"><td>Time Played</a></td><td></td><td>Artist</td><td width="1%"></td><td>Title</td><td>Label</td></tr>';
my @stuff = $html =~ />([^<]+)</g;
print join (", ", @stuff), "\n";
См. http://codepad.org/qz9d5Bro , если вы хотите попробовать его запустить.
Используйте HTML :: TableExtract . На самом деле.
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TableExtract;
use LWP::Simple;
my $file = 'Table3.htm';
unless ( -e $file ) {
my $rc = getstore(
'http://www.ntsb.gov/aviation/Table3.htm',
$file);
die "Failed to download document\n" unless $rc == 200;
}
my @headers = qw( Year Fatalities );
my $te = HTML::TableExtract->new(
headers => \@headers,
attribs => { id => 'myTable' },
);
$te->parse_file($file);
my ($table) = $te->tables;
print join("\t", @headers), "\n";
for my $row ($te->rows ) {
print join("\t", @$row), "\n";
}
Это то, что я имел в виду в другом посте, говоря о "специфических" HTML-парсерах.
Вы могли бы сэкономить много времени, направив свою энергию на чтение документации, а не на то, чтобы бросать регулярные выражения в стену и видеть если застряли.