我有一个XML文件,我从网上和解析 . XML中的一个项目是具有HTML的'content'值 . 我正在使用XML::Simple::XMLin解析文件,如下所示:
$xml= eval { $data->XMLin($xmldata, forcearray => 1, suppressempty=> +'') };
当我使用 Data::Dumper
转储哈希时,我发现 SimpleXML
正在将HTML解析为哈希树:
'content' => {
'div' => [
{
'xmlns' => 'http://www.w3.org/1999/xhtml',
'p' => [
{
'a' => [
{
'href' => 'http://miamiherald.typepad.com/.a/6a00d83451b26169e20133ec6f4491970b-pi',
'style' => 'FLOAT: left',
'img' => [
etc.....
这不是我想要的 . 我想 grab 这个条目里面的内容 . 我该怎么做呢?
4 回答
我的一般规则是,当XML::Simple开始失败时,是时候转到另一个XML处理模块了 .
XML::Simple
真的应该适用于你不需要做一些额外工作的情况,我通常觉得这些工作很难与_1764580整合 .输出:
如果HTML直接包含在XML中(而不是被转义或在
CDATA
中),则XML::Simple无法知道停止解析的位置 .但是,您可以通过将数据结构的该部分传递给
XML::Simple
的XMLout()
函数来重构HTML .如果HTML不在CDATA构造内部或以其他方式编码,那么您可以做的就是轻微破解 .
在使用XML :: Simple进行处理之前,找到
<my_html>
标记的内容,这些内容可能是可疑的HTML,并通过HTML实体编码器("<" => "<'"等...)传递它们,如HTML :: Entities . 然后插入编码内容而不是<my_html>
标记的原始内容 .这非常hacky,非常容易做错,除非你100%知道你正在用正则表达式做什么,不应该这样做 .
话虽如此,它将解决您的问题 .