从xml属性中查找并执行数学表达式并替换该值
发布时间:2020-12-16 23:18:12 所属栏目:百科 来源:网络整理
导读:以下是一些需要处理的xml文件的摘录: BirimAdiAdet/BirimAdiBirimCarpan1/BirimCarpanHavaleFiyati0/HavaleFiyatiHavaleFiyatiParaBirimiTL/HavaleFiyatiParaBirimiPrice10/Price1SatisFiyati1ParaBirimiTL/SatisFiyati1ParaBirimiIsk10/Isk1SatisFiyati20/
以下是一些需要处理的xml文件的摘录:
<BirimAdi>Adet</BirimAdi> <BirimCarpan>1</BirimCarpan> <HavaleFiyati>0</HavaleFiyati> <HavaleFiyatiParaBirimi>TL</HavaleFiyatiParaBirimi> <Price1>0</Price1> <SatisFiyati1ParaBirimi>TL</SatisFiyati1ParaBirimi> <Isk1>0</Isk1> <SatisFiyati2>0</SatisFiyati2> 我需要做的是获取标签之间的值,并对其进行以下数学运算. Price1 = round(Price1)-0.1; 该脚本应该对指定路径中的所有xml文件执行此操作. 我考虑使用’sed’或’awk’,但我不确定这可以在sed中轻松完成.使用xmllint对我来说太过分了.有任何想法吗?我是这些实用程序的新手,所以无法想到找到我想要的那个正则表达式是: /<s*Price1[^>]*>([^<]*)<s*/s*Price1s*>/ 解决方法
我会使用XML解析器来完成这项工作.例如,XML :: Twig.这是一个例子:
#!/usr/bin/env perl use warnings; use strict; use XML::Twig; for my $f ( @ARGV ) { my $twig = XML::Twig->new( twig_handlers => { 'Price1' => sub { $_->set_text( sprintf( "%.1f",int( $_->text) - 0.1 ) ) },},pretty_print => 'indented',)->parsefile( $f )->print; } 假设文件名是script.pl,测试文件是xmlfile,内容为: <root> <BirimAdi>Adet</BirimAdi> <BirimCarpan>1</BirimCarpan> <HavaleFiyati>0</HavaleFiyati> <HavaleFiyatiParaBirimi>TL</HavaleFiyatiParaBirimi> <Price1>3.3</Price1> <SatisFiyati1ParaBirimi>TL</SatisFiyati1ParaBirimi> <Isk1>0</Isk1> <SatisFiyati2>0</SatisFiyati2> </root> 运行它像: perl script.pl xmlfile 产量: <root> <BirimAdi>Adet</BirimAdi> <BirimCarpan>1</BirimCarpan> <HavaleFiyati>0</HavaleFiyati> <HavaleFiyatiParaBirimi>TL</HavaleFiyatiParaBirimi> <Price1>2.9</Price1> <SatisFiyati1ParaBirimi>TL</SatisFiyati1ParaBirimi> <Isk1>0</Isk1> <SatisFiyati2>0</SatisFiyati2> </root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |