【发布时间】:2011-06-29 08:56:12
【问题描述】:
我有一个项目,其中我的输入文件曾经是 XML。我现在被要求开始处理带有嵌入式 CSS 的 HTML,我希望尽可能干净地完成此任务,并且代码更改尽可能少。我使用 XML::LibXML 来解析 XML 文件,但现在我们正在使用 CSS 迁移到 HTML,我想我需要迁移到其他东西。也就是说,在我深陷愚蠢的决定之前,我可能会后悔,我想在这里问:你们用什么来完成这种任务?
旧 XML 和新 HTML 输入文件的结构非常相似,都包含相同的信息。 HTML 使用 div 代替 XML 的文本节点,并将其样式信息保存在样式标记和属性中,而不是单独的 xml 属性中。
旧 XML 的一个例子是:
<text font="TimesNewRoman,BoldItalic" size="11.04" x="59" y="405" w="52"
h="12" bold="yes" italic="yes" cs="4.6" o_bbox="59,405;52,12"
o_size="11.04" o_cs="4.6">
Some text
</text>
新 HTML 的一个例子是:
<div o="9ka" style="position:absolute;top:145;left:89;x-pdf-top:744;x-pdf-left:60;x-pdf-bottom:732;x-pdf-right:536;">
<span class="ft19" >
Some text
</span></nobr>
</div>
其中“ft19”指的是来自页面顶部的css样式元素的格式:
.ft19{ vertical-align:top;font-size:14px;x-pdf-font-size:14px;
font-family:Times;color:#000000;x-pdf-color:#000000;font-style:italic;
x-pdf-letter-spacing:0.83px;}
基本上,我想要的只是一个可以将每个节点的风格元素作为属性读取的解析器,所以我可以执行以下操作:
my @texts_arr = $page_node->findnodes('text');
my $test_node = $texts_arr[1];
print "node\'s bold value is: " . $text_node->getAttribute('bold');
因为我可以使用 XML。解析HTML是否存在类似的东西?我真的很想确保我以正确的方式开始,而不是在 CPAN 上找到我想要的东西,并在两个月后意识到还有另一个模块对我想做的事情更好。
想法?
【问题讨论】:
-
由于我没有时间为你写一个真正的答案,我只会评论一个我不久前做过的事情的链接,它应该可以满足你的所有需求,但你必须自己深入研究一下:Move your CSS from stylesheets to inline with Perl.