我正在使用XML::XPath
很长一段时间来解析xml,现在已经出现了修改属性值的情况。
xml在文件中可用,它与此非常相似。
<AppName>
<Action AllDay='1'StartRace='1'/>
<StartPoint AM_PM='AM' Hours='09' Mins='30'/>
<EndPoint AM_PM='PM' Hours='06' Mins='30'/>
</AppName>
我编写了一个perl脚本来更改StartPoint标记的小时,
use strict;
use warnings;
use XML::Twig;
my $fileName = 'Conf.xml';
my $twig = XML::Twig->new(
twig_roots => { StartPoint => \&ReplaceAtriValue },
twig_print_outside_roots => 1, );
sub ReplaceAtriValue {
my ($twig, $startPoint) = @_;
if ( '09' eq $startPoint->att('Hours') )
{
$startPoint->set_att( Hours => '12');
}
$startPoint->print(); }
$twig->parsefile($fileName);
我有一些成功将09替换为12,现在$twig
有xml对象。如果我将此对象($twig
)发送到使用XML::XPath
解析xml的SetWindow.pm,则无法识别此对象。有没有办法将XML::Twig
对象转换为XML::XPath
对象,以便XML::XPath
解析$twig
对象中的值。
实际上我长时间使用XML::XPath
因此我必须将XML::XPath
对象发送到我自己的* .pm,如SetWindow.pm,同时我需要更改值在发送给我自己的PM之前标准xml的属性。
先谢谢。
非常感谢任何帮助!
rndpilot
答案 0 :(得分:2)
XML :: Xpath解析XML,因此您应该以文件或字符串形式发送给它。
现在,如果你想要聪明,并且你想要的只是从树枝中提取信息,你可以使用XML :: Twig :: XPath而不是XML :: Twig(:: Twig :: XPath是XML :: twig发布,以及twig对象及其元素将获得足够的DOM-ish方法,使XML :: XPath能够对它们运行查询。我不确定它是否值得。
我能想到的替代方法:
getAttributeNodes
和setValue
的组合应该这样做,