4

一些用于 xml 的更简单的 perl dom 解析器的作者似乎不鼓励将它们用于混合内容,而支持 XML::LibXML。所以我现在开始学习 XML::LibXML 并且正在寻找常用的食谱示例。考虑从网络上读取 (x)html 文档并对其进行操作。(perl cookbook 2nd edition 现在已经有 10 年历史了,这里的覆盖范围相对较弱。)我发现我想从以下内容开始:

use XML::LibXML;
my $dom = XML::LibXML->load_xml( location => "fame-1-1.html", recover => 2 );
## recover=>2 is needed to allow valid html entities

初学者可以使用的好食谱示例包括

  1. 将 $dom 转换为 perl 数据结构。Data::Dumper($dom) 并没有给我带来什么特别有趣的东西。当然,我想转换两种方式:从和到。

  2. 漂亮地打印输出,也许有一些控制。

  3. 将 html 清理为 xhtml。

  4. 用逻辑进行转换。(有使用单个 dom 元素做事的好例子,但我认为更通用。)例如,我如何对两个连续的 dom 元素进行操作?我有一个 XAB。如果因此连续(例如,style="width:0"),我想向 sup 添加一个“类”或“样式”。

  5. 将所有类和样式分解为一个最小的模板样式表。

  6. XML::LibXML 的其他“酷”和“简单”用途。

  7. (留给后续编辑问题以响应有用的食谱)建议:

    (a) 用递增的 id 枚举 <ul> 内的每个 <li>(例如,<li id="1"> ... <li id="2"> ...)。可以用多个元素来完成

    (b) 迭代多个标签(例如,按出现的顺序打印出所有 li、dl 和 dt)

样品赞赏。

/iaw

4

1 回答 1

2

对于 HTML DOM 样式解析,您可以使用 Mojo::DOM

http://blogs.perl.org/users/joel_berger/2012/10/an-example-using-mojodom-for-rewriting-html.html

http://blogs.perl.org/users/tempire/2011/02/easy-dom-parsing-with-mojodom.html

使用 Mojolicious 用户代理解析 HTML

1: 我的 $dom = Mojo::DOM->new( $content );

2:

3:不需要

4:

#remove stylesheets
$dom->find('link')->each( sub{ $_->remove if $_->{rel} eq 'stylesheet' } );

5:有可能,但值得提出一个新问题

6:查看链接

例子:

Mojo::UserAgent->new->get('http://www.google.com/search?q=mojolicious')
->res->dom->find('h3.r a')
->each( sub { print shift->all_text . "\n" } );
于 2014-02-17T09:25:29.350 回答