是否有任何可能的方法将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的属性值

提前谢谢

非常感谢您的帮助


rndpilot

XML::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);