perl脚本使用XML :: LibXML迭代xml节点
发布时间:2020-12-16 06:17:50 所属栏目:大数据 来源:网络整理
导读:我试图想出一个perl脚本迭代一些节点并在xml文件中获取值. 我的XML文件如下所示,并保存spec.xml ?xml version="1.0" encoding="UTF-8"?WO xmlns="http://www.example.com/yyyy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" WOSet SR FINISHTIME2
我试图想出一个perl脚本迭代一些节点并在xml文件中获取值.
我的XML文件如下所示,并保存spec.xml <?xml version="1.0" encoding="UTF-8"?> <WO xmlns="http://www.example.com/yyyy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > <WOSet> <SR> <FINISHTIME>2013-07-29T18:21:38-05:00</FINISHTIME> <STARTTIME xsi:nil="true" /> <TYPE>SR</TYPE> <DESCRIPTION>Create CUST</DESCRIPTION> <EXTERNALSYSTEMID /> <REPORTEDBY>PCAUSR</REPORTEDBY> <REPORTEDEMAIL /> <STATUS>RESOLVED</STATUS> <SRID>1001</SRID> <UID>1</UID> <SPEC> <AVALUE>IT</AVALUE> <ATTRID>CUST_DEPT</ATTRID> <NALUE xsi:nil="true" /> <TVALUE /> </SPEC> <SPEC> <AVALUE>001</AVALUE> <ATTRID>DEPT_CODE</ATTRID> <NVALUE xsi:nil="true" /> <TVALUE /> </SPEC> </SR> </WOSet> </WO> 当我运行下面的脚本时,我既没有得到输出也没有任何错误来获得解决问题的地方…… 我不是一个perl专家,会喜欢这里的专家通过一些亮点…… #!/usr/bin/perl use XML::LibXML; use strict; use warnings; my $file = 'spec.xml'; my $parser = XML::LibXML->new(); my $tree = $parser->parse_file($file); my $root = $tree->getDocumentElement; foreach my $atrid ( $tree->findnodes('WO/WOSet/SR/SPEC') ) { my $name = $atrid->findvalue('ATTRID'); my $value = $atrid->findvalue('AVALUE'); print $name print " = "; print $value; print ";n"; } 我的预期产量是 CUST_DEPT = IT DEPT_CODE = 001 解决方法
XML在null命名空间中不包含任何名为WO的元素.您希望匹配http://www.example.com/yyyy命名空间中名为WO的元素.
#!/usr/bin/perl use strict; use warnings; use XML::LibXML qw( ); use XML::LibXML::XPathContext qw( ); my $file = 'spec.xml'; my $parser = XML::LibXML->new(); my $doc = $parser->parse_file($file); my $root = $doc->getDocumentElement; my $xpc = XML::LibXML::XPathContext->new($doc); $xpc->registerNs(y => 'http://www.example.com/yyyy'); for my $atrid ( $xpc->findnodes('y:WO/y:WOSet/y:SR/y:SPEC') ) { my $name = $xpc->findvalue('y:ATTRID',$atrid); my $value = $xpc->findvalue('y:AVALUE',$atrid); print "$name = $valuen"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |