草庐IT

Twig_Filter

全部标签

xml - 如何使用 Perl 的 XML::Twig 解析不完整的 XML 片段?

我正在尝试从XML格式的日志文件中提取数据。由于这些很大,我正在使用XML::Twig从缓冲区而不是整个文件中提取相关数据由于这些是来自STDIN的串联数据,因此XML的格式远非正确。解析器经常因错误而停止。我怎样才能让XML解析器忽略错误并只提取我感兴趣的标签?我是否必须退回到正则表达式解析(开始标记-结束标记)? 最佳答案 我实际上只会累积之间的数据标记然后解析该字符串,假设每条消息的内容很小:#!/usr/bin/perlusestrict;usewarnings;useXML::Simple;useData::Dumper;

xml - 使用 Perl 和 XML::Twig 解析 XML - 进一步提取嵌套子项

目前正在尝试弄清楚如何最好地处理以下示例XML数据:1SomeStuff我目前正在使用XML::Twig来操作其他一切,我想继续使用这个模块来实现我的目标,即:从C2A和C2B中提取数据,并将它们分配给变量。请注意,C2A和C2B可能有多个条目,例如需要将它们连接成一个@array。但是,我的问题是向下导航树,例如,如果我们按照我发现的另一个示例进行操作,那么对于这些​​数据来说这就足够了:NameoftheMovie28372382Thisisalongdescriptionshortdescriptiondirector1director2...解决方案是:@directors=$

XML::Twig 并保存属性顺序

我正在使用XML::Twig编辑一些XML文件下面是代码:my$twig=XML::Twig->new(pretty_print=>'indented',twig_handlers=>{Vendor=>sub{$_->set_att('ID'=>$_->{'att'}->{'att1'});$_->set_att('ID'=>$_->{'att'}->{'att2'});$_->set_att('ID'=>$_->{'att'}->{'att3'});$_->set_att('ID'=>$_->{'att'}->{'att4'});},},);$twig->parsefile('myf

xml - 为什么 XML::Twig 不调用我的 end_tag_handler?

我尝试为每个标签调用子例程,但是end_tag_handlers永远不会被调用。我的目标是这个序列:---顺序---什么时候调用\&loading.什么时候调用\&kicks.什么时候调用\&bye.什么时候调用\&app.什么时候调用\&kicks.什么时候调用\&bye.什么时候调用\&app.什么时候调用\&finish.→它没有被调用。临时文件:#!/usr/local/bin/perl-wuseXML::Twig;my$twig=XML::Twig->new(start_tag_handlers=>{'auto'=>\&loading},twig_handlers=>{'ap

xml - 为什么 XML::Twig 输出提取的字符串两次?

为什么我的字符串在输出中出现两次?#!/usr/bin/perlusewarnings;usestrict;useXML::Twig;my$string='Hello,World!';my$t=XML::Twig->new(twig_handlers=>{cd_catalogue=>\&cd_catalogue,},pretty_print=>'indented',);$t->parse($string);subcd_catalogue{my($t,$cd_catalogue)=@_;$cd_catalogue->flush;}#Output:##Hello,World!###Hell

arrays - 带有 SimpleXMLElement 和键数组的 Twig "in"运算符

这里我遇到了一个匹配SimpleXMLElement属性“名称”匹配数组中的键的问题。当我通过调用数组的键转储与字符串键匹配的属性的结果时,结果如预期的那样为真。但是当我尝试使用in运算符让它匹配时,结果是错误的。Twig:{{dump(options|keys)}}{%fortenseinverbXML%}{{dump(tense.attributes.name)}}{{dump(tense.attributes.name==(options|keys)[1])}}{{dump(tense.attributes.nameinoptions|keys)}}{%endfor%}结果:ar

xml - 在 Twig 中打印 XML 的内容

我试图在Perl中打印一些基本日志,但我遇到了一个非常简单的问题:我无法打印XML标记的内容。my$twig=XML::Twig->new(pretty_print=>"nice");$twig->parse($xml);my$root=$twig->root;my@desc=$root->descendants_or_self('node');my$nrofdesc=@desc;my$sentence=$root->descendants('sentence')->print;my$sentenceid=$root->{att}->{id};if($nrofdesc>$maxdesc

xml - 如何使用 Twig 模块从 XML 中删除注释

我正在使用XML::Twig模块从XML文件中删除所有注释。示例文件可以是-nodeAcontent1nodeAcontent3nodeBcontentnodeccontentsomedataonesomedataagaintwofewmore我使用的脚本是这样的-#!/usr/bin/perlusestrict;usewarnings;useXML::Twig;my$infile='demo.xml';my$twig=XML::Twig->new(comments=>'drop',pretty_print=>'indented')->parsefile($infile);$twig-

XML::Twig - 没有破坏结构的 set_text

XML::Twig使用set_text方法-有一个警告:set_text($string)Setthetextfortheelement:iftheelementisaPCDATA,justsetitstext,otherwisecutallthechildrenoftheelementandcreateasinglePCDATAchildforit,whichholdsthetext.因此,如果我想做一些简单的事情,比如-比如说-更改我的XML::Document中所有文本的大小写:#!/usr/bin/perlusestrict;usewarnings;useXML::Twig;m

xml - 使用 Perl XML::Twig 处理程序处理大文件的内存使用效率低下

我偶尔需要从大型XML数据库导出中提取数据。文件大小在600到700MB之间。经过几天的研究,我得出结论XML::Twig是要走的路,因为它的处理程序允许我逐块处理文件。我按照示例进行操作,经过数小时的反复试验,我编写了执行我需要完成的工作的Perl代码。代码有效,它提取了我想要的数据并计算了我需要的细节。但是在运行脚本时(处理620MB的XML需要大约15分钟),我在事件监视器中注意到,到最后内存使用率迅速增加到不合理的高水平。我删除了处理我感兴趣的XML标签的Perl代码,并用一条指令替换它来增加一个变量,只需计算product的数量。元素已被发现。内存使用情况类似。首先是正常的,