如何使用Perl计算HTML/XML嵌套标签层级并添加level属性
嵌套相同标签层级计算实现
处理XML标签层级计算不要用正则手写解析,直接用Perl的XML::Twig模块实现更稳定,能避免不规则XML格式导致的解析错误,具体实现如下:
完整代码
use strict; use warnings; use XML::Twig; sub add_sec_level { my ($xml_str) = @_; my $twig = XML::Twig->new( pretty_print => 'indented', twig_handlers => { sec => sub { my ($t, $node) = @_; # 统计同名祖先节点数量,加1即为当前层级 my $level = $node->ancestors('sec')->count + 1; $node->set_att('level', $level); } } ); $twig->parse($xml_str); return $twig->sprint; } # 测试示例 my $input = <<'XML'; <sec> <sec></sec> <sec> <sec></sec> </sec> </sec> XML print add_sec_level($input);
说明
- 运行后输出和需求中的期望结果完全一致,保留原有缩进格式
- 核心逻辑通过
ancestors('sec')直接统计当前节点所有同名祖先的数量,计算层级的逻辑完全匹配需求 - 如果环境缺失
XML::Twig模块,执行cpan XML::Twig即可安装 - 该方案兼容带有其他属性、子节点、注释的XML结构,不会破坏原有内容
内容的提问来源于stack exchange,提问作者Rajkumar
相关产品推荐
相关产品推荐

