是否有任何可能的方法将XML::Twig对象转换为XML::XPath对象?
很长一段时间以来,我一直在使用是否有任何可能的方法将XML::Twig对象转换为XML::XPath对象?,xml,perl,xpath,twig,Xml,Perl,Xpath,Twig,很长一段时间以来,我一直在使用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>
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>
我知道如何成功地将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的属性值
提前谢谢
非常感谢您的帮助
rndpilotXML::Xpath解析XML,因此您应该将其以文件或字符串的形式发送给它 现在,如果您想变得聪明,并且只想从细枝中提取信息,那么可以使用XML::twig::XPath而不是XML::twig(::twig::XPath是XML::twig发行版的一部分),并且细枝对象及其元素将获得足够的DOM方法,使XML::XPath能够对其运行查询。但我不确定这是否值得 我能想到的其他方法:
- 为什么不直接使用XML::XPath更改属性?
和getAttributeNodes
的组合应该可以做到这一点setValue
- 用XML::LibXML替换XML::XPath。接口非常相似(DOM+XPath),是一个更好的模块
- 使用XML::Twig::XPath在XML::Twig中获得完整的XPath支持
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);