如何从不同的HTML生成器解析和规范化HTML?
这是这个的延伸。我正试图解析嵌入博客的XML备份中的HTML片段,并用InDesign标记重新标记它们 Blogger没有对其任何帖子的HTML进行标准化,帖子可以用Word、Windows Live Writer、本机Blogger界面或文本编辑器编写,从而产生大量不同形式的HTML。一些帖子不标记段落,只在段落之间使用双如何从不同的HTML生成器解析和规范化HTML?,html,perl,parsing,Html,Perl,Parsing,这是这个的延伸。我正试图解析嵌入博客的XML备份中的HTML片段,并用InDesign标记重新标记它们 Blogger没有对其任何帖子的HTML进行标准化,帖子可以用Word、Windows Live Writer、本机Blogger界面或文本编辑器编写,从而产生大量不同形式的HTML。一些帖子不标记段落,只在段落之间使用双标记,其他帖子使用实际的标记 解析这种不标准的标记聚合的最佳方法是什么 此外,每篇文章都不是一个完整的HTML文件——只是插入到模板中的一个片段,这意味着没有要解析的整体HT
标记,其他帖子使用实际的
标记
解析这种不标准的标记聚合的最佳方法是什么
此外,每篇文章都不是一个完整的HTML文件——只是插入到模板中的一个片段,这意味着没有要解析的整体HTML结构(
,等等)。这对XML/HTML解析有任何影响吗
以下是一些可能的示例,主要是标准HTML,缺少段落:
This is a section of a blog post. It has <a href="#">links</a> and lists and stuff. Weee....
<br>
<br>
Here's a list
<br/>
<br />
<ul><li>Item 1</li><li>Item 2</li><ul>
And another paragraph here...
<br>
<br/>
Etc.
这是一篇博文的一部分。它有很多东西和清单。Weee。。。。
这是一张单子
- 项目1
- 项目2
这里还有一段。。。
等
单词HTML看起来像这样-??由单词生成的HTML相对更容易处理。我只想去掉所有的标记属性(除非你关心样式)。这将使您能够使用非常简单的HTML,然后您可以对其进行样式设置 可以让你相对无痛 至于其他的东西,那将需要一些尝试和错误。如果我能想出一些聪明的办法,我会更多地考虑这个问题,稍后再发帖子 后续更新: 嗯,有件事让我有点畏缩,但似乎奏效了:
#!/usr/bin/perl
use strict;
use warnings;
use File::Slurp;
use Text::Markdown qw( markdown );
my $html = read_file \*DATA;
$html =~ s{(?:<br(:? ?/)*>)}{\n\n}g;
print markdown( $html );
__DATA__
This is a section of a blog post. It has <a href="#">links</a> and lists and stuff. Weee....
<br>
<br>
Here's a list
<br/>
<br />
<ul><li>Item 1</li><li>Item 2</li></ul>
And another paragraph here...
<br>
<br/>
#/usr/bin/perl
严格使用;
使用警告;
使用File::Slurp;
使用Text::Markdown qw(Markdown);
my$html=读取文件\*数据;
$html=~s{(?:)}{\n\n}g;
打印降价($html);
__资料__
这是一篇博文的一部分。它有很多东西和清单。Weee。。。。
这是一张单子
- 项目1
- 项目2
这里还有一段。。。
输出:
<p>This is a section of a blog post. It has <a href="#">links</a> and lists and
stuff. Weee....</p>
<p>Here's a list</p>
<ul><li>Item 1</li><li>Item 2</li></ul>
<p>And another paragraph here...</p>
这是一篇博文的一部分。它具有和列表以及
东西Weee
这是一张单子
- 项目1
- 项目2
这里还有一段
由Word生成的HTML相对更容易处理。我只想去掉所有的标记属性(除非你关心样式)。这将使您能够使用非常简单的HTML,然后您可以对其进行样式设置
可以让你相对无痛
至于其他的东西,那将需要一些尝试和错误。如果我能想出一些聪明的办法,我会更多地考虑这个问题,稍后再发帖子
后续更新:
嗯,有件事让我有点畏缩,但似乎奏效了:
#!/usr/bin/perl
use strict;
use warnings;
use File::Slurp;
use Text::Markdown qw( markdown );
my $html = read_file \*DATA;
$html =~ s{(?:<br(:? ?/)*>)}{\n\n}g;
print markdown( $html );
__DATA__
This is a section of a blog post. It has <a href="#">links</a> and lists and stuff. Weee....
<br>
<br>
Here's a list
<br/>
<br />
<ul><li>Item 1</li><li>Item 2</li></ul>
And another paragraph here...
<br>
<br/>
#/usr/bin/perl
严格使用;
使用警告;
使用File::Slurp;
使用Text::Markdown qw(Markdown);
my$html=读取文件\*数据;
$html=~s{(?:)}{\n\n}g;
打印降价($html);
__资料__
这是一篇博文的一部分。它有很多东西和清单。Weee。。。。
这是一张单子
- 项目1
- 项目2
这里还有一段。。。
输出:
<p>This is a section of a blog post. It has <a href="#">links</a> and lists and
stuff. Weee....</p>
<p>Here's a list</p>
<ul><li>Item 1</li><li>Item 2</li></ul>
<p>And another paragraph here...</p>
这是一篇博文的一部分。它具有和列表以及
东西Weee
这是一张单子
- 项目1
- 项目2
这里还有一段
正如我在另一个问题中所说,我喜欢。它可以处理XML和HTML。正如我在另一个问题中所说的,我喜欢。它可以处理XML和HTML。FWIW,我倾向于使用XML::LibXML满足所有XML和HTML需求。下面是一个将一行“坏”HTML转换为格式良好的XHTML文档的单行代码:
perl -MXML::LibXML -ne 'my $p = XML::LibXML->new->parse_html_string($_); print $p->toString'
在您的例子中,您可能希望使用DOM来生成具有正确标记的新文档。这是直截了当的;LibXML使用与JavaScript相同的w3cdom
例如,此输入:
<p>Foo<p>Bar<br>Baz!
FooBar
Baz!
转换为:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Foo</p><p>Bar<br/>Baz!
</p></body></html>
Foo酒吧
Baz!
这可能是您想要的,请记住,使用DOM来翻译。。。不要担心这种打印的表示。FWIW,我倾向于使用XML::LibXML满足我所有的XML和HTML需求。下面是一个将一行“坏”HTML转换为格式良好的XHTML文档的单行代码:
perl -MXML::LibXML -ne 'my $p = XML::LibXML->new->parse_html_string($_); print $p->toString'
在您的例子中,您可能希望使用DOM来生成具有正确标记的新文档。这是直截了当的;LibXML使用与JavaScript相同的w3cdom
例如,此输入:
<p>Foo<p>Bar<br>Baz!
FooBar
Baz!
转换为:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Foo</p><p>Bar<br/>Baz!
</p></body></html>
Foo酒吧
Baz!
这可能是您想要的,请记住,使用DOM来翻译。。。不要担心这种打印的表示。您能发布一个大小合理的最坏情况输入片段吗?使用正确的模块,HTML解析很容易。你真的在问你该如何使它正常化吗?是的。在这一点上,有4-5种不同样式的HTML可以通过,所以我想知道在遍历DOM之前是否需要先对HTML进行标准化/规范化/整理…你能发布一个大小合理的最坏情况输入片段吗?使用正确的模块,HTML解析很容易。你真的在问你该如何使它正常化吗?是的。目前有4-5种不同样式的HTML可以使用,所以我想知道在遍历DOM之前是否需要先对HTML进行标准化/规范化/整理…它能处理未标记的文本并将其转换为真实的
?这是我主要关心的问题…不,你需要使用Blogger使用的相同算法。这就是为什么我要使用XML::LibXML,它对修复HTML文档有明确的支持。它能处理未标记的文本并将其转换为真实的
?这是我最关心的…不,你需要使用