这是此question的扩展。我正在尝试解析嵌入到博客的XML备份中的HTML代码片段,并用InDesign标记对它们进行重新标记。
Blogger没有为其任何帖子标准化HTML,并且帖子可以用Word、Windows Live Writer、原生Blogger界面或文本编辑器编写,这导致了大量不同形式的HTML。有些帖子不标记段落,只在段落之间使用双<br>--其他的则使用实际的<p>标签。
解析这种非标准的标签集合的最佳方法是什么?
此外,每个帖子都不是一个完整的超文本标记语言文件--只是插入到模板中的一个片段--这意味着没有整体的超文本标记语言结构需要解析(<html><body></body></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.单词HTML看起来像这样- http://www.timeatlas.com/mos/images/stories/word_html_tags.png
发布于 2009-06-11 17:59:58
Word生成的HTML相对比较容易处理。我只需要去掉所有的标签属性(除非你关心样式)。这将使您拥有相当简单的HTML,然后您可以对其进行样式化。
HTML::TokeParser::Simple可以帮助让这一切变得相对轻松。
至于其他的东西,那将需要一些试验和错误。我会更多地考虑这一点,如果我能想出一些聪明的东西,我会在稍后发布。
更新:
好吧,这里有一些东西让我有点畏缩,但它似乎是有效的:
#!/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/>输出:
<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>发布于 2009-06-11 16:44:48
HTML::Parser
发布于 2009-06-11 19:44:07
正如我在另一个问题中所说的,我喜欢XML::Twig。它既可以处理XML,也可以处理HTML。
https://stackoverflow.com/questions/982203
复制相似问题