使用perl中的XML :: LibXML修改xml的标记属性值

时间:2014-03-10 15:02:35

标签: xml perl xml-libxml

我正在尝试使用LibXML修改XML文件中的属性值。这是我的xml文件的一部分

xmlns="urn:x-xxx:r2:reg-doc:1551-fad.110.05:en:*">
<meta-data><?Pub Dtl?>
<confidentiality class="xxx-internal"/>
<doc-name>XXX</doc-name>
<doc-id>
<doc-no type="registration">XXX</doc-no><language
code="en"/><rev>A</rev>
<date><y>2013</y><m>04</m><d>22</d></date>
</doc-id>
<company-id>
<business-unit></business-unit>
<company-name></company-name>
<company-symbol logotype="XX"></company-symbol>
</company-id>
<title>XXX</title>
<drafted-by>
<person>
<name>XXX</name><signature>XXX</signature>
<location>IN</location><company>XXX</company><department>BC</department>
</person>
</drafted-by>
<approved-by approved="yes">
<person>
<name>XXX</name><signature>XXX</signature>
<location>IN</location><company>XXX</company><department>BC</department>
</person>
</approved-by>

这是我试过的脚本。

#!usr/bin/env perl -w
use strict;
use warnings;
use XML::LibXML;
use Data::Dumper;
my $filename="/path/filename.xml";
my $parser=XML::LibXML->new();
my $doc=$parser->parse_file($filename);
my $xpath='/meta-data/approved-by/@approved';
print Dumper $doc->findvalue($xpath);
my ($attr) = $doc->findnodes($xpath);
$attr->setValue('Yes');
print Dumper $doc->findvalue($xpath);

当我执行此脚本时,我收到一条错误消息,如。

C:\Windows\System32>perl C:\path\perl\sample3.pl
Could not create file parser context for file "/C:/path/1_
1543-CRA 119 1364_2.xml": Result too large at C:\path\perl\sample3.pl line 8

我明白它无法解析,但为什么?我的xml文件非常庞大。这是问题还是我的脚本?请指导我做什么。感谢。

2 个答案:

答案 0 :(得分:1)

如果您使用前导斜杠后跟驱动器名称指定了文件名,请尝试删除前导斜杠。来自XML::LibXML的错误消息可能具有误导性,并且应该没有此类文件或目录

答案 1 :(得分:1)

抱歉线程死灵,但我刚刚有这个完全相同的症状。 XML :: LibXML报告

&#34;无法为文件创建文件解析器上下文 :结果太大

我正在测试三个文件,一个被取代,两个没有。成功文件比失败的文件大,并且在检查时我在失败文件的文件路径中出错了。

这条消息确实应该是&#34;无法找到文件&#34;

如果您遇到同样的问题,请仔细检查文件路径。