我正在尝试使用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:WindowsSystem32>perl C:pathperlsample3.pl
Could not create file parser context for file "/C:/path/1_
1543-CRA 119 1364_2.xml": Result too large at C:pathperlsample3.pl line 8
我知道它不能解析,但是为什么?我的xml文件非常大。是问题还是我的剧本有问题?请指导我该怎么做。谢谢。
如果指定的文件名带有一个前斜杠,后跟一个驱动器名,请尝试删除前斜杠。XML::LibXML
的错误信息可能是误导性的,应该是没有这样的文件或目录。
抱歉的线程巫术,但我刚刚有这个完全相同的症状。XML::LibXML报告
"无法为文件创建文件解析器上下文。: Result too large
我测试了三个文件,一个成功了,两个没有。成功的文件比失败的两个文件大,在检查时,我在失败文件的文件路径上犯了一个错误。
这个消息应该是类似于"cannot find file"
如果您遇到同样的情况,请仔细检查您的文件路径。
。